我创建了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的状态栏上浏览显示。
答案 0 :(得分:3)
这是PHP扩展试图阻止SQL injection(在某种程度上)的PHP扩展的一个特性。请注意,PHP中的mysql
扩展名已弃用,未维护,在编写新的PHP脚本时不应使用。手册中的deprecation is documented。 mysql_query()
上的文档也明确指出:
mysql_query()向与指定link_identifier关联的服务器上的当前活动数据库发送唯一查询(不支持多个查询)。
请注意,新的mysqli
扩展名是原始mysql
扩展名的替代,它具有一个特殊功能,允许在一个查询字符串中包含多个语句:mysqli_multi_query()