Php PDO编制的报表isn';行不通
我发现我的PDO MySQL插入不起作用 它的基本格式是:Php PDO编制的报表isn';行不通,php,mysql,pdo,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
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”字符串,用作数据库中的标记
因此,即使我看到查询的第一部分成功地形成为:
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服务器版本对应的手册,以了解在第[etc]行中使用接近“1,6,10)值(?,,,,,,,,,?)”的正确语法
应该是:
$InsertQuery->execute(array($ID, $hashed_email, $dob, $YesNoString));
此外,您不能有以下列:
标识符可以以数字开头,但除非引用,否则不能仅由数字组成
因此,您需要将列包装在backticks`my\u表中
不包含$numberString(1,6,10)中的列
或者您需要在列名中添加反勾号
(`1`、`6`、`10`)尝试在数字列名周围加上反勾(`):
插入'my_table'(id,email_hash,dob,'1','6','10')值(?,,,,,,,?);
我认为数组值周围不需要双引号,是吗?非常正确-但当我更正时,结果是一样的。什么是$numberstring
?'1
应该表示该值有问题。.实际上没有名为1、6和10的列-对吗?(如果有,就必须引用它们。)“编号”列名通常是数据库设计不好的标志。您应该能够想出更好的“会说话”的列名,这些列名告诉您它们包含哪些数据。如果你说在这种情况下没有更好的名字,那么这可能是因为你没有正确地规范化。@imagina编辑以提供关于另一个问题的更多信息$YesNoString
听起来像是假设从$QuestionMarkString
映射到占位符。这种方法不会发生这种情况。将有6个占位符和4个值试图绑定。@chris85的问题是,这个问题既有错误,又有糟糕的表设计,很难提供一个一次性解决所有问题的答案。a,有很多问题需要解决。