2013-12-17 42 views
0

我使用PhpMyAdmin运行以下SQL语句。通过PHP向PHP添加触发器

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 

大家都知道问题是什么吗? 谢谢!

+0

什么是错误? –

+0

权限错误也许,请尝试打印错误信息。 – hank

+0

mysqli的实际错误是什么,你可以通过['mysqli_error']获得(http://www.php.net/manual/en/mysqli.error。 PHP)?你发布的是你的自定义错误消息,它显示了9个时间和查询,但不包含来自MySQL的真实错误消息。 – peterm

回答

2

按MySQL的:

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

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

参考

1

谢谢大家。 我修改了我的代码,以解决问题。

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(); 
     } 
    } 
}