我正在尝试执行INSERT INTO查询但由于某种原因会抛出错误。
$result1 = mysqli_query($connection,
"INSERT INTO `results`
(`result_quiz_name`, `result_marks`, `result_grade`,
`student_id`, `result_max_marks`)
VALUES ('Ionic Bonding Introduction', $marks, $grade,
$student, 5)");
变量$marks
是一个整数,$grade
变量是一个字符串,$student
变量只是一个会话变量的整数值。显示的错误是:
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 1, 5)' at line 1
我似乎无法解决语法错误的位置。我在phpMyAdmin中运行了这个查询,它运行正常(显然用变量代替值)。
谢谢,
答案 0 :(得分:3)
就像在PHP中一样 - 在SQL中必须引用一个字符串,如果它们是值的一部分,则必须正确转义字符串语法中的引号。
使用var_dump($marks, $grade, $student)
检查您的变量。如果$grade
是一个像你说的字符串,那么你真的应该通过适当的转义函数(在你的情况下为,例如mysqli_real_escape_string
)为你的数据库运行它。
更好的方法是使用parameterized queries,PDO和MySQLi都支持PHP。
例如,您可以将sql代码更改为以下内容...
$stmt = mysqli_prepare($connection,
"INSERT INTO `results`
(`result_quiz_name`, `result_marks`, `result_grade`,
`student_id`, `result_max_marks`)
VALUES ('Ionic Bonding Introduction', ?, ?, ?, 5)");
这为您提供了一个准备好的声明,可以安全插入任何值而不会破坏您的SQL语法......
if ($stmt) {
$stmt->bind_param("i", $marks);
$stmt->bind_param("s", $grade);
$stmt->bind_param("i", $student);
$stmt->execute(); // this executes your statement
$result = $stmt->get_result(); // this gives you the result set
$row = $result->fetch_array(); // get rows from there
}
答案 1 :(得分:0)
当列类型为text / string / char / varchar等时,您必须在参数列表中将变量包装在引号中,就像您对'Ionic Bonding Introduction'
所做的那样
$result1 = mysqli_query($connection,
"INSERT INTO `results`
(`result_quiz_name`, `result_marks`, `result_grade`,
`student_id`, `result_max_marks`)
VALUES ('Ionic Bonding Introduction', $marks, '$grade',
$student, 5)");
答案 2 :(得分:-1)
尝试使用以下代码
$result1 = mysqli_query($connection, "INSERT INTO `results` (`result_quiz_name`, `result_marks`, `result_grade`, `student_id`, `result_max_marks`) VALUES ('Ionic Bonding Introduction', '$marks', '$grade', '$student', 5)");
答案 3 :(得分:-1)
将$grade
更改为'$grade'
$result1 = mysqli_query($connection,
"INSERT INTO `results`
(`result_quiz_name`, `result_marks`, `result_grade`,
`student_id`, `result_max_marks`)
VALUES ('Ionic Bonding Introduction', $marks, '$grade',
$student, 5)");
答案 4 :(得分:-1)
由于$ grade是一个字符串,因此应在查询中引用:
$result1 = mysqli_query($connection, "INSERT INTO `results` (`result_quiz_name`, `result_marks`, `result_grade`, `student_id`, `result_max_marks`) VALUES ('Ionic Bonding Introduction', $marks, '$grade', $student, 5)");