PDO准备的声明不起作用

时间:2016-06-29 20:29:30

标签: php mysql pdo

我发现我的PDO MySQL插件没有工作

它的基本格式是:

INSERT INTO `my_table` (id, email_hash, dob, 1, 6, 10) VALUES (?, ?, ?, ?, ?, ?)

实际上是这样的:

$InsertQuery = $db->prepare("INSERT INTO `my_table` (id, email_hash, dob, $NumbersString) VALUES (?, ?, ?, $QuestionMarkString)");
$InsertQuery->execute(array("$ID, $hashed_email, $dob, $YesNoString"));

变量$QuestionMarkString填写(正确)问号占位符的数量。

变量$YesNoString是一个" 1" s,其长度适当,可作为数据库中的标记。

所以即使我可以看到查询的第一部分成功地形成为:

INSERT INTO `my_table` (id, email_hash, dob, 1, 6, 10) VALUES (?, ?, ?, ?, ?, ?)

...并且执行数组的内容成功:

52, $2y$10$h9yXWUd8edQVMTSwZrX7T.pJ/C1pLDE9b081OtGmG6nbAtXr7lASK, 29062016, 1, 1, 1

..插入物仍然没有发生。我收到PHP错误说:

  

PHP警告:PDO :: prepare():SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在#1,6; 10)VALUES(?,?,?,?,?,?)'附近使用正确的语法。在线[等]

3 个答案:

答案 0 :(得分:3)

应该是:

$InsertQuery->execute(array($ID, $hashed_email, $dob, $YesNoString));

此外,您不能拥有only contain digits

的列
  

标识符可以以数字开头,但除非引用可能不仅仅由数字组成。

因此你需要用反引号“

包装你的列

答案 1 :(得分:0)

MY_TABLE

不包含$ NumbersString(1,6,10)

中的列

或者您需要向列名称添加反引号 (`1`,`6`,`10`)

答案 2 :(得分:0)

尝试在数字列名称周围添加反引号(`):

{field: 'varillasEnLecho', title: 'Varilla en lecho', formatter: function(value, row, index) {
    return '<input class="form-control data-input" value="' + value + '" row-index="' + index + '" field="varillasEnLecho"  onchange="updateCell($(this))">';
  }
}