PHP SQL语法错误(没有线索为什么)

时间:2015-11-07 15:02:49

标签: php mysql sql-server

我正在尝试执行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中运行了这个查询,它运行正常(显然用变量代替值)。

谢谢,

5 个答案:

答案 0 :(得分:3)

就像在PHP中一样 - 在SQL中必须引用一个字符串,如果它们是值的一部分,则必须正确转义字符串语法中的引号。

使用var_dump($marks, $grade, $student)检查您的变量。如果$grade是一个像你说的字符串,那么你真的应该通过适当的转义函数(在你的情况下为,例如mysqli_real_escape_string )为你的数据库运行它。

更好的方法是使用parameterized queriesPDOMySQLi都支持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)");