我使用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
每个人都知道问题出在哪里吗?谢谢
根据MySQL:
C.5.2.14.命令不同步如果命令不同步;您现在不能在客户端代码中运行此命令,您调用客户端函数的顺序不对。
例如,如果您正在使用
mysql_use_result()
,并在调用mysql_free_result()
之前尝试执行新查询,则可能会发生这种情况。如果您尝试执行两个返回数据的查询,而不在其间调用mysql_use_result()
或mysql_store_result()
,也可能发生这种情况。
参考 :
- MySQL:命令不同步
- 我对SO上类似问题的回答之一:在中出错调用存储过程
谢谢大家。我将代码修改为如下,并解决了问题。
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();
}
}
}