【问题标题】:Adding trigger to MySQL by PHP通过 PHP 向 MySQL 添加触发器
【发布时间】:2013-12-17 09:09:47
【问题描述】:

我使用 PhpMyAdmin 运行以下 SQL 语句。

CREATE TRIGGER `insert_channel_test2` AFTER DELETE ON `channel_test2` FOR EACH ROW INSERT INTO `tv`.`LOG_test2` (`table_name`, `table_action`) VALUES('channel_test2', 'delete');    

运行成功,但是当我使用PHP网页查询上述代码时,出现致命错误。

$query = "CREATE TRIGGER `insert_channel_test2` AFTER DELETE ON `channel_test2` FOR EACH ROW INSERT INTO `tv`.`LOG_test2` (`table_name`, `table_action`) VALUES('channel_test2', 'delete');"
$this->link = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME );
$full_query = $this->link->multi_query( $query );

错误信息如下。

 Commands out of sync; you can't run this command now

大家知道问题出在哪里吗? 谢谢!

【问题讨论】:

  • 可能是权限错误,尝试实际打印错误信息..
  • 使用mysqli_error 可以得到的mysqli 实际错误是什么?您发布的是您的自定义错误消息,显示时间和查询是 9,但不包含来自 MySQL 的真正错误消息。
  • 对不起,下面的错误信息是由mysqli_error产生的。 命令不同步;你现在不能运行这个命令

标签: php mysql sql triggers


【解决方案1】:

根据 MySQL:

C.5.2.14。命令不同步 如果您的命令不同步;您现在无法在客户端代码中运行此命令, 您以错误的顺序调用客户端函数。

例如,如果您使用 mysql_use_result() 并在调用 mysql_free_result() 之前尝试执行新查询,则可能会发生这种情况。如果您尝试执行两个返回数据的查询而不在两者之间调用mysql_use_result()mysql_store_result(),也会发生这种情况。

参考

【讨论】:

    【解决方案2】:

    谢谢大家。 我将我的代码修改为以下,并修复了问题。

    public function multi_query( $query )
    {
        $query = $this->link->multi_query( $query );
        $this->clear_next();
        if(  mysqli_error( $this->link ) )
        {
            $this->log_db_errors( mysqli_error( $this->link ), $query, 'Fatal' );
            return false;
        }
        else
        {
            return true;
        }
        mysqli_free_result( $query );
    } 
    
    public function clear_next()
    {
        while($this->link->more_results())
        {
            $this->link->next_result();
            if($res = $this->link->store_result())
            {
                $res->free(); 
            }
        }
    } 
    

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多