2017-07-09 120 views
2

私は自分のクエリビルダを作成して、次の問題を解決しました。 、両方の私は、MySQLのワークベンチとphpMyAdminには、このまったく同じSQL文を試してみたSQLSTATE [HY000]:一般的なエラー:1の近くに "。":UPDATE文の構文エラー

PHP Fatal error: Uncaught PDOException:
SQLSTATE[HY000]: General error: 1 near ".": syntax error in ....

UPDATE `users` SET `users`.`name` = :usersName WHERE `id` = :id; 

は、私は次のエラーが表示されます。次のクエリでPDOオブジェクトにprepare()メソッドを呼び出すときエラーや警告は返されません。

私がテーブル名の接頭辞を付ける理由は、後で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

このクエリはどのように実行されていますか?それが問題の原因かもしれません。また、PDOを使用している場合は、クエリの最後に ';'を付ける必要はありません。 – tadman

+1

tablename接頭辞が 'set'の中にあるのは標準SQLではありません – Rahul

+0

@tadman私は、あとでパラメータを追加する準備をしているだけで、すでに例外を与えたその関数に対してです。 – Bas

答えて

0

Ok 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 | 
+0

私の質問が更新されました。そのSQLフィドルでクエリを貼り付けるときに、パラメータ名を実際の値に置き換えるときにもそれを再現できません。 – Bas

+0

@Basはそれを見つけました:あなたのmysqlではなくsqliteを使用しています。 – Blag

関連する問題