SQLSTATE [HY000]:一般错误:1“接近”。“:UPDATE语句

时间:2017-07-09 21:25:21

标签: php sqlite pdo

我正在为练习创建自己的查询构建器并遇到以下问题;使用以下查询在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);

该行之后发生错误。

为什么会出现此语法错误,如何在不删除表前缀的情况下修复它?

1 个答案:

答案 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文件中获取代码吗?

SQL Fiddle

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 |