我正在为练习创建自己的查询构建器并遇到以下问题;使用以下查询在prepare()
对象上调用PDO
方法时:
UPDATE `users` SET `users`.`name` = :usersName WHERE `id` = :id;
我收到以下错误:
PHP致命错误:未捕获的PDOException:
SQLSTATE [HY000]:一般错误:1靠近“。”:语法错误....
我在MySQL工作台和PhpMyAdmin中尝试过这个完全相同的SQL语句,这些都不会返回任何错误或警告。
我在为表名添加前缀的原因是因为我稍后会添加SQL JOIN
。
没有表格前缀,它完美无缺。没有它,它看起来像这样:
UPDATE `users` SET `name` = :usersName WHERE `id` = :id;
我的PHP文件如下所示:
<?php
$statement = "UPDATE `users` SET `users`.`name` = :usersName WHERE `id` = :id;";
$PDO = new PDO('sqlite::memory:');
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$PDO->exec("CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50))");
$PDO->exec("INSERT INTO `users` (id, name) VALUES (1, 'Bas')");
$PDO->exec("INSERT INTO `users` (id, name) VALUES (2, 'Basert')");
$statement = $PDO->prepare($statement);
该行之后发生错误。
为什么会出现此语法错误,如何在不删除表前缀的情况下修复它?
答案 0 :(得分:0)
好new PDO('sqlite::memory:')
:SQLite不是MySQL。
https://www.tutorialspoint.com/sqlite/sqlite_update_query.htm
语法为:
UPDATE table_name
SET column1 = value1,column2 = value2 ....,columnN = valueN
WHERE [condition];
我无法复制。 这意味着它可能来自您的配置或查询中的拼写错误。
您可以直接从.php文件中获取代码吗?
MySQL 5.6架构设置:
CREATE TABLE users
(`id` int, `name` varchar(5))
;
INSERT INTO users
(`id`, `name`)
VALUES
(1, 'test'),
(2, 'test2')
;
UPDATE `users` SET `users`.`name` = 'plop' WHERE `id` = 1;
查询1 :
select * from `users`
<强> Results 强>:
| id | name |
|----|-------|
| 1 | plop |
| 2 | test2 |