无法在一个查询中运行多个语句

时间:2013-09-14 09:53:47

标签: php mysql

我创建了MySql过程,它创建了多个表并插入数据,如果数据不是最新的,那么删除它并在mysql命令行或我的sql workbench中显示消息。对于这个我使用的变量然后显示如下它在mysql中工作正常。

SET _output = 'Generating table one...'; 
select _output;

create table ec_ms_yy_qt
(select * from table1);
call checkdata();

SET _output = 'Generating table tow..'; 
select _output;

如果我从php调用它,它会在第一个语句后停止并且不执行该过程。 它只返回'Generating table one ...'; 。如果找到select语句

,则表示停止运行
$rs = mysql_query( ‘CALL processdata()’ );
while($row = mysql_fetch_assoc($rs))
{
  print_r($row);
}

然后我从商店程序中删除了select _output,它运行正常。但这不是我想要的解决方案,用户不会通过任何错误发生通知以及它被引发的位置。它还挂起程序,直到程序完成,并在等待localhost的状态栏上浏览显示。

1 个答案:

答案 0 :(得分:3)

这是PHP扩展试图阻止SQL injection(在某种程度上)的PHP扩展的一个特性。请注意,PHP中的mysql扩展名已弃用,未维护,在编写新的PHP脚本时不应使用。手册中的deprecation is documentedmysql_query()上的文档也明确指出:

  

mysql_query()向与指定link_identifier关联的服务器上的当前活动数据库发送唯一查询(不支持多个查询)。

请注意,新的mysqli扩展名是原始mysql扩展名的替代,它具有一个特殊功能,允许在一个查询字符串中包含多个语句:mysqli_multi_query()