Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO编制的报表isn';行不通_Php_Mysql_Pdo - Fatal编程技术网

Php PDO编制的报表isn';行不通

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

我发现我的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”字符串,用作数据库中的标记

因此,即使我看到查询的第一部分成功地形成为:

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,有很多问题需要解决。