【问题标题】:Query runs fine in phpmyadmin but not from script查询在 phpmyadmin 中运行良好,但不是来自脚本
【发布时间】:2012-01-06 16:28:05
【问题描述】:
$query_string = "UPDATE _notifications SET _notifications.notification_flag = 0 WHERE _notifications.notification_id = 'JTQBPULM3M' ;
UPDATE _notifications SET _notifications.notification_flag = 0 WHERE _notifications.notification_id = 'KC7KZT2JAT' ;
UPDATE _notifications SET _notifications.notification_flag = 0 WHERE _notifications.notification_id = 'M6L5T5Z2K0' ;";
$this->db->query($query_string);

查询从 phpmyadmin 运行良好,但如果从 php 运行则抛出此错误:

错误号:1064

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 'UPDATE _notifications SET _notifications.notification_flag = 0 附近 WHERE _notificati' 在第 2 行

UPDATE _notifications 
SET _notifications.notification_flag = 0 
WHERE _notifications.notification_id = 'JTQBPULM3M' ; 

UPDATE _notifications 
SET _notifications.notification_flag = 0 
WHERE _notifications.notification_id = 'KC7KZT2JAT' ; 

UPDATE _notifications 
SET _notifications.notification_flag = 0 
WHERE _notifications.notification_id = 'M6L5T5Z2K0' ;

更新:谢谢大家!

【问题讨论】:

  • 我记得可能是因为 mysql 库不再允许在一个查询中使用多个语句。
  • 您可以只使用 IN 在一个查询中提供多个值。

标签: php mysql sql codeigniter phpmyadmin


【解决方案1】:

假设我的问题是你在同一个查询中有多个语句,你可以试试这个:

$query_string = "UPDATE _notifications SET _notifications.notification_flag = 0 
WHERE _notifications.notification_id IN ('JTQBPULM3M', 'KC7KZT2JAT', 'M6L5T5Z2K0')";
$this->db->query($query_string);

这将使它成为一个单一的声明。

我假设它在 phpMyAdmin 中有效,因为我怀疑 phpMyAdmin 将多个语句分解为单独的查询,而不是单个查询。 (请注意,纯属猜测。)

【讨论】:

    【解决方案2】:

    您并不是说您使用的是什么数据库包装器,但许多库不能执行多个查询。如果库提供,您必须使用“multi_query”方法,或者将它们分成不同的方法。

    【讨论】:

      【解决方案3】:

      根据手册,您可以通过在连接时设置一个参数来执行多个这样的语句,然后很多事情都搞砸了。如果在其他方面方便的话,更容易获取 ' 脚本并拆分然后迭代。

      但如果你真的需要的话。

      MySql 5.1 Manual Multiple Queries

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-25
        相关资源
        最近更新 更多