我是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++;
}
?>
答案 0 :(得分: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 injection个漏洞的风险。
您可以使用查询参数代替SQL表达式中的单个文字值。因此,您不能将参数用于表名,列名,值列表或其他语法。只有你在SQL中编写单个字符串或单个数字的地方。
答案 1 :(得分:0)
你应该把所有变量都放在单引号中(试着产生类似:“('1','John','Canada'等等)。为了做到这一点你应该使用类似的东西:< / p>
"... VALUES ('$id', '$i', '0', etc...)"
提示:
双引号表示首先解析文本,这样就可以将变量直接集成到其中。
假设i = 1.那产生:
"i is: $i" == "i is: 1";
但是,如果你想要使用直接文本而不首先解析它,你可以使用单引号('):
'i is: $i' == 'i is: $i'
答案 2 :(得分: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));