0

我创建了创建多个表并插入数据的 MySql 过程,如果数据不是最新的,则将其删除并在 mysql 命令行或我的 sql 工作台中显示消息。为此,我使用了变量,然后像下面一样显示它正在工作在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 _output 它工作正常。但这不是我想要的解决方案,用户不会收到任何错误的通知以及它是在哪里引发的。它还挂起程序直到程​​序完成并在状态栏上浏览显示等待本地主机。

4

1 回答 1

3

这是 PHP 的 MySQL 扩展试图阻止SQL 注入的一个特性(在某种程度上)。请注意mysql,PHP 中的扩展已弃用、未维护,并且不应在编写新的 PHP 脚本时使用。弃用记录在手册中。上的文档mysql_query()还明确指出:

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

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

于 2013-09-14T10:08:28.000 回答