SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 — PHP — PDO [重复]

2023-11-28

我已经浏览了所有其他 StackOverflow(和谷歌)有同样问题的帖子,但似乎没有一个能解决我的问题。

我正在使用 PDO 和 PHP。

My code:

$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 )

这是预期的(没有一个为空)

但它输出错误

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“from、to、name、subject、message”附近使用的正确语法 VALUES ('[电子邮件受保护]', '[电子邮件受保护]' 在第 1 行

不知道如何解决这个问题。有任何想法吗?


from是SQL中的关键字。如果不引用它,则不能将其用作列名。在 MySQL 中,诸如列名之类的内容使用反引号引用,即`from`.

就我个人而言,我不会打扰;我只是重命名该列。

附言。正如评论中指出的那样,to是另一个 SQL 关键字,因此也需要用引号引起来。方便的是,drupal.org 的人们维护着一个SQL 中的保留字列表.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 — PHP — PDO [重复] 的相关文章

随机推荐