Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
另一个常见的MySQL错误w/PHP PDO_Php_Mysql_Pdo - Fatal编程技术网

另一个常见的MySQL错误w/PHP PDO

另一个常见的MySQL错误w/PHP PDO,php,mysql,pdo,Php,Mysql,Pdo,我得到的MySQL错误42000:1064表明以下SQL存在一般语法错误: UPDATE `events` SET ?=?, ?=?, ?=now() WHERE `event_id`=?; 要转换为可读语句并执行的PHP代码: <?php $ar = array_fill(0,count($args),'/\?/'); echo preg_replace($ar,$args,$sql,1); $this->execute($sql, $args); ?> 当粘贴到MySQ

我得到的MySQL错误42000:1064表明以下SQL存在一般语法错误:

UPDATE `events` SET ?=?, ?=?, ?=now() WHERE `event_id`=?;
要转换为可读语句并执行的PHP代码:

<?php
$ar = array_fill(0,count($args),'/\?/');
echo preg_replace($ar,$args,$sql,1);
$this->execute($sql, $args);
?>
当粘贴到MySQL工作台时,将成功完成

[mysqlErrorMsg] => SQLSTATE[42000]: Syntax error or access violation: 1064 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 ''event_name'='test', 'form_id'='webform', 'last_updated'=now() WHERE `event_id`=' at line 1

需要注意的是,我的用户拥有对该表的完全访问权限。

您不能在列名上使用占位符。只有价值观

您的查询的计算结果不符合要求

UPDATE `events` SET event_name=test, form_id=webform, last_updated=now()
WHERE `event_id`=124;
但被评估为:

UPDATE `events` SET 'event_name'='test', 'form_id'='webform', 'last_updated'=now() 
WHERE `event_id`=124;
看到引号了吗?这些是字符串,不是列名

因此,对列名进行硬编码,并且仅对值使用占位符

UPDATE `events` SET event_name=?, form_id=?, last_updated=now() WHERE `event_id`=?;

不能在列名上使用占位符。只在values@juergend我写了同样的东西,然后删除了它。他没有使用预先准备好的语句,他使用preg_replace来替换占位符。我希望他在字符串中没有使用任何问号。你不能在列名周围加单引号,它们应该是反引号。看起来我解释得不太好。这正是我的观点answer@Barmar报价由PDO引擎放在那里。Juergen是对的,我不能用PDO来定义键。如果允许的话,我会在几分钟内接受答案。
UPDATE `events` SET event_name=?, form_id=?, last_updated=now() WHERE `event_id`=?;