0

我对 PHP 和 SQL 很陌生...我无法识别我的 SQL 代码中使用的变量?

这是完整的代码,我正在尝试用从 html 页面回答的问题的答案填充数据库表

请问有什么帮助吗?

<?php

$odbc = mysql_connect ('localhost', 'root', '') or die ("Could not connect to database");
mysql_select_db('Questionaire', $odbc) or die ("can not find database");

$sql;
$quantity = 1;

$id = 222;
$r = 1;
$course = '555';



for ($i = 1; $i < $quantity; $i++)
{   
$answer = $_POST['q'.$r];

if ($answer == 'a')
{
    $sql = "INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES (".$id.", ".$i.",       '1', '0', '0',  '0', '0', '')";                         
}

if ($answer == 'b')
{
    $sql = 'INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES ('.$id.', '.$i.',               "0", "1", "0",  "0", "0", "")'; 
    echo'<h2> hello </h2>'; 
    $result = mysql_query($sql,$odbc) or die ("can not run query");                 
}

if ($answer == 'c')
{
    $sql = "INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES (".$id.", ".$i.",       '0', '0', '1',  '0', '0', '')";     echo $sql;                  
}

if ($answer == 'd')
{
    $sql = "INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES (".$id.", ".$i.", '0', '0', '0', '1', '0', '');";                           
}

$r++;

}



?>
4

3 回答 3

3

如果您是 PHP 和 MySQL 新手,最好尽早学习最佳实践,并养成使用查询参数的习惯。.这比用于将 PHP 变量连接到 SQL中要容易得多。

<?php
$pdo = new PDO(...connection parameters...);

$sql = "INSERT INTO `questionaire`.`tanswer` 
    (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) 
    VALUES (?, ?, ?, ?, ?, ?, ?, ?)";

$stmt = $pdo->prepare($sql) 
    or die(print_r($pdo->errorInfo, true));

$values = array($id, $i, 1, 0, 0, 0, 0, '');

$stmt->execute($values) 
    or die(print_r($stmt->errorInfo, true));

它更容易编码,并且避免了SQL 注入漏洞的风险。

您可以使用查询参数代替 SQL 表达式中的单个文字值。因此,您不能将参数用于表名、列名、值列表或其他语法。仅在您将在 SQL 中编写单个字符串或单个数字的地方。

于 2012-11-02T17:08:03.653 回答
0

您应该将所有变量放在单引号中(尝试生成类似:“('1','John','Canada'等......)。为此,您应该使用类似:

"... VALUES ('$id', '$i', '0', etc...)"

小费:

双引号表示首先解析文本,这使得可以将变量直接集成到其中。

假设 i = 1。这会产生:

 "i is: $i" == "i is: 1";

但是,如果您希望获得使用过的直接文本而不先对其进行解析,则可以使用单引号 ('):

 'i is: $i' == 'i is: $i' 
于 2012-11-02T17:07:08.163 回答
0

这里有一些对你来说更简单的东西:

      $query = sprintf("INSERT INTO table " .
               " (id, col1, col2,col3) " .
               " VALUES (NULL, '%s', '%s', '%s');",
               mysql_real_escape_string($val1),
               mysql_real_escape_string($val2),
               mysql_real_escape_string($val3));
于 2012-11-02T17:17:01.653 回答