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

我正在使用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();
}

第一张照片

Array ( [:from]    => abc@gmail.com 
        [:to]      => lala@me.com 
        [:name]    => abc 
        [:subject] => abc 
        [:message] => abc )

预期为(无为空)

但它会输出错误

SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用"from、to、name、subject、message)值('abc@gmail.com', 'lala@me.com"在1号线

不知道怎么解决这个问题.有什么 idea 吗?

推荐答案

from是SQL中的关键字.如果没有引号,则不能将其用作列名.在MySQL中,像列名这样的东西用反号引起来,即`from`.

就我个人而言,我不会费心;我只想重新命名这个专栏.

注:正如 comments 中指出的,to是另一个SQL关键字,因此也需要引用它.方便的是,drupal的员工.保持list of reserved words in SQL分.

Php相关问答推荐

带有打印和回声的PHP意外命令

无法使用DOMPDF在PDF中呈现非ANSI字符

如何在Woocommerce中禁用机器人添加到推车?

以编程方式更改新订单、已取消订单和失败订单的邮箱WooCommerce通知

使用箭头函数语法时,在回调范围内无法访问变量变量(警告:未定义的变量)

Nginx重写扩展名为.php的动态URL

在WooCommerce中禁用特定日期之前的免费送货

如何在Livewire 3 Form类中做依赖注入?

如何将LARAVEL模块路径和项目路径合并,因为当我使用模块路径时,它们会覆盖项目路径

$this->;db->;update();CodIgnitor中的功能不工作

如何在其他数组php中创建具有关联数组的数组

在 WooCommerce 订阅续订订单中设置送货方式

Woocommerce 临时购物车税未根据第一个请求正确计算

laravel Eloquent 模型的问题

如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作

在 php 中生成 MAC ISO/IEC 9797-1

PHP 在数组中搜索值

向元素添加类时添加循环错误

我需要一个正则表达式模式来获取在不包含特定字符串后面的模式中的文本

PHP 合并/合并多维数组