我已经浏览了所有其他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] => abc@gmail.com [:to] => lala@me.com [:name] => abc [:subject] => abc [:message] => abc ) 这是预期的(没有一个为空)
但它输出错误
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在“从,到,名称,主题,消息”附近使用VALUES(第1行的“ abc@gmail.com”,“ lala@me.com”)
不知道如何解决此问题。有任何想法吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
from是SQL中的关键字。您必须在未引用的情况下将其用作列名。在MySQL中,列名之类的内容使用反引号引起来,即from
。
就个人而言,我不会打扰。我只是将列重命名。
PS。正如注释中指出的那样,它to是另一个SQL关键字,因此也需要将其引起来。方便地,drupal.org上的人员维护SQL保留字的列表。来源:stack overflow