1. ホーム
  2. php

[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。

2022-01-24 03:25:06

質問

同じ問題を抱えた他のStackOverflow(およびgoogle)の投稿にすべて目を通しましたが、私の問題を解決してくれるものはないようです。

PDOとPHPを使用しています。

私のコード

$vals = array(
   ':from'    => $email,
   ':to'      => $recipient,
   ':name'    => $name,
   ':subject' => $subject,
   ':message' = >$message
);
print_r($vals);
try {
   $pdo = new PDOConfig();
   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $sql = "SELECT * FROM messages WHERE `message` LIKE :message";
   $q = $pdo->prepare($sql);
   $q->execute(array(':message' => $vals[':message']));
   $resp = $q->fetchAll();

   foreach ($resp as $row) {
      throw new Exception('Please do not post the same message twice!');
   }

   $sql = "INSERT INTO messages (from, to, name, subject, message) VALUES (:from, :to, :name, :subject, :message)";
   $q = $pdo->prepare($sql);
   $q->execute($vals);
} 
catch(PDOException $e) {
   echo $e->getMessage();
}

で、最初のprint_rは

Array ( [:from]    => [email protected] 
        [:to]      => [email protected] 
        [:name]    => abc 
        [:subject] => abc 
        [:message] => abc )

これは期待されているものです(どれもnullです)。

というエラーが出力されます。

sqlstate[42000]: 構文エラーまたはアクセス違反です。1064 SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、'from, to, name, subject, message) VALUES ('a[email protected]', '[email protected]' at line 1) の近くで使用する正しい構文を確認してください。

どうしたらいいのかわからないのですが、何かいい方法はありませんか?

解決方法は?

from はSQLのキーワードです。クォートせずにカラム名として使用することはできません。MySQL では、カラム名のようなものはバックスティックで引用されます。 `from` .

個人的には、気にせず、カラムの名前を変更します。

PS.コメントでご指摘の通りです。 to もSQLキーワードなので、引用する必要があります。便利なことに、drupal.orgの人々は、引用符で囲むための SQLの予約語リスト .