Php 不能在一个查询中运行多个语句

Php 不能在一个查询中运行多个语句,php,mysql,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 = 'Gen

我已经创建了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调用了相同的函数,它将在第一条语句之后停止,并且不执行该过程。 它只返回“生成表一…”。如果找到select语句,则表示停止运行

$rs = mysql_query( ‘CALL processdata()’ );
while($row = mysql_fetch_assoc($rs))
{
  print_r($row);
}

然后我从存储过程中删除了select _输出,使其工作正常。但这不是我想要的解决方案,用户将不会被任何错误发生以及错误发生的位置通知。它还挂起程序,直到程序完成,并在状态栏上浏览显示,等待本地主机。

这是PHPs MySQL扩展试图阻止(某种程度上)的功能。请注意,PHP中的扩展已弃用,未维护,在编写新的PHP脚本时不应使用。手册中有详细说明。
mysql\u query()
上的文档也明确指出:

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


请注意,新扩展取代了原来的
mysql
扩展,它有一个特殊的函数,允许在一个查询字符串中包含多个语句:

这是PHPs-mysql扩展试图阻止(某种程度上)的一个特性。请注意,PHP中的扩展已弃用,未维护,在编写新的PHP脚本时不应使用。手册中有详细说明。
mysql\u query()
上的文档也明确指出:

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


请注意,新的扩展取代了原来的
mysql
扩展,它有一个特殊的函数,允许在一个查询字符串中包含多个语句:

您确定它没有运行该过程吗?我怀疑
mysql\u query()
可能只能从第一个查询中获取行。其他一切都在运行,你就是无法获取这些行。mysql_*一次只运行一个查询,以帮助减轻注入攻击。第一个应该像你说的那样进行评估,但是如果操作正确,其他的应该被忽略。你确定它没有运行这个过程吗?我怀疑
mysql\u query()
可能只能从第一个查询中获取行。其他一切都在运行,你就是无法获取这些行。mysql_*一次只运行一个查询,以帮助减轻注入攻击。第一个应该像您所说的那样进行评估,但是如果操作正确,其他的应该被忽略。$mysqli=newmysqli(“xxxxx”、“root”、“xxxxx”、“xxxxx”)$mysqli->connect\u errno$sql=“调用processdata()”$res=$mysqli->multi_查询($sql);echo$res;谢谢,它正在工作…但有一个问题是它在mysql服务器上的浏览器it echo 1的后台工作。。。并且不显示过程中介于…之间的输出消息?如何将所有消息逐个存储并显示在屏幕上,以便用户了解过程的当前状态(一个过程中的所有查询)$mysqli=newmysqli(“xxxxx”、“root”、“xxxxx”、“xxxxx”)$sql=“调用processdata()”$res=$mysqli->multi_查询($sql);echo$res;我添加了以下代码,输出消息一起显示在屏幕上,但在完成过程的所有查询后,browse被挂起,直到..$res=$mysqli->multi_query($sql);执行{if($res=$mysqli->store_result()){var_dump($res->fetch_all(mysqli_ASSOC));$res->free();}}而($mysqli->more_results()&&&$mysqli->next_result())$mysqli=新的mysqli(“xxxxx”、“root”、“xxxxx”、“xxxxx”)$mysqli->connect\u errno$sql=“调用processdata()”$res=$mysqli->multi_查询($sql);echo$res;谢谢,它正在工作…但有一个问题是它在mysql服务器上的浏览器it echo 1的后台工作。。。并且不显示过程中介于…之间的输出消息?如何将所有消息逐个存储并显示在屏幕上,以便用户了解过程的当前状态(一个过程中的所有查询)$mysqli=newmysqli(“xxxxx”、“root”、“xxxxx”、“xxxxx”)$sql=“调用processdata()”$res=$mysqli->multi_查询($sql);echo$res;我添加了以下代码,输出消息一起显示在屏幕上,但在完成过程的所有查询后,browse被挂起,直到..$res=$mysqli->multi_query($sql);执行{if($res=$mysqli->store_result()){var_dump($res->fetch_all(mysqli_ASSOC));$res->free();}}而($mysqli->more_results()&&&$mysqli->next_result());