我已经检查了多个PDO帖子,他们都说语法不正确,但即使在检查时我似乎无法找到它。 这是我的代码:
$stmt = $pDatabase->prepare('INSERT INTO Agenda (index, date, shortdesc) VALUES :values ON DUPLICATE KEY UPDATE date=VALUES(date), shortdesc=VALUES(shortdesc)');
我尝试在最后用;
修复它,或者一次插入一个。{p>它在准备时出错,所以无论:values
什么都不重要。
这是产生的错误:
致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以便在索引,日期,短片附近使用正确的语法VALUES(?,?,?)ON DUPLICATE KEY UPDATE date = VALUES(date)'在第1行' in /comersomers/f/b/e/**************/httpd.www/editagenda.php:14堆栈追踪:#0 / customers / f / b / e / ** ************ / httpd.www / editagenda.php(14):PDO->准备(' INSERT INTO年龄......')#1 {main}第14行/customers/f/b/e/**************/httpd.www/editagenda.php投放
其中14是prepare
行。
此行在DBadmin中运行良好。
我的表格如下:
index date shortdesc longdesc boolean
10 2015-12-12 Something copyshort 1
11 2015-11-12 Somethi2ng copyshort2 0
答案 0 :(得分:5)
您不能将一个占位符用于多个值。
来自the manual:
注意: 参数标记只能表示完整的数据文字。文字,关键字,标识符和任意查询部分都不能使用参数绑定。例如,您不能将多个值绑定到SQL语句的IN()子句中的单个参数。
请改为尝试:
$stmt = $pDatabase->prepare('INSERT INTO Agenda (index, date, shortdesc) VALUES (:index, :date, :shortdesc) ON DUPLICATE KEY UPDATE date=VALUES(date), shortdesc=VALUES(shortdesc)');
(请注意,您需要(
和)
。)然后传递三个值,每个占位符一个(:index
,:date
和:shortdesc
)。
P.S。请注意,index
和date
在MySQL(以及大多数RDBMS)中都是reserved words。你需要把它们包在背包中,如:
$stmt = $pDatabase->prepare('INSERT INTO Agenda (`index`, `date`, shortdesc) VALUES (:index, :date, :shortdesc) ON DUPLICATE KEY UPDATE date=VALUES(`date`), shortdesc=VALUES(shortdesc)');