PHP $ mysqli->当表名为“check”时,使用奇怪的语法准备错误

时间:2013-11-06 23:32:02

标签: php sql mysqli prepared-statement

此调用失败并显示错误:

mysqli_report(MYSQLI_REPORT_ALL);
$stmt = $mysqli->prepare("INSERT INTO check VALUES (?,?,?,?,?,?)");

我得到的错误:

  

未捕获的异常'mysqli_sql_exception',消息'你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在'check VALUES'附近使用正确的语法   (?,?,?,?,?,?)'在第1行

  1. 我有一个名为“check”的表,其中包含适量的字段
  2. 如果我将表名更改为checkSomething则可以正常工作......
  3. 任何想法?

2 个答案:

答案 0 :(得分:2)

check是保留关键字。要将其用作表名,您必须使用这样的反引号来转义它:`check`

$stmt = $mysqli->prepare("INSERT INTO `check` VALUES (?,?,?,?,?,?)");

答案 1 :(得分:2)

在MySQL中检查是reserved word。你需要用这样的反引号包围它:

$mysqli->prepare("INSERT INTO `check` VALUES (?,?,?,?,?,?)");

或者更好的是,将它重命名为您不需要经常使用的特殊情况。

$mysqli->prepare("INSERT INTO checks VALUES (?,?,?,?,?,?)");