【问题标题】:No output for multiple queries in mysqlmysql中的多个查询没有输出
【发布时间】:2013-07-18 13:02:00
【问题描述】:

我们动态生成一个包含一个大的 插入 查询的 sql 文件。该文件将使用以下命令从 PHP 应用程序定期运行:

mysql --force  -u foo -pbar demo < demo-file.sql

该命令没有输出,除非发生错误,因为文件的内容只有一个 insert 命令。现在我们决定将文件更改为包含多个 insert 查询而不是一个大查询。从此命令的输出为

0
0
0

我们的 PHP 应用程序失败,因为它现在假设由于输出不为空而发生错误。所以我的问题是,我可以编写一个没有由多个查询生成的输出的 sql 文件吗?我尽量不碰 PHP 应用程序。

我知道有更好的设计,但代码在历史上不断增长 :-)

[更新 1]

应用程序基本上可以

$response = shell_exec('mysql --force  -u foo -pbar demo < demo-file.sql');
if (empty($response)) {
  echo 'OK';
} else {
  echo 'error: '.$response;
}

[更新 2] sql文件包含类似

insert into;
select sleep(0);
insert into;
select sleep(0);
insert into;
select sleep(0);

【问题讨论】:

  • 除了插入文件之外什么都没有?
  • 能否将输出定向到 >> /dev/null
  • 插入是否有效?可能是表示错误。
  • 是的,基本上在重复更新时插入。
  • 是的,它们可以工作,因为输出为 0。这是一个客户端服务器应用程序,我尽量避免更改客户端,因为它们是具有一个服务器的多个客户端,简化说。

标签: php mysql


【解决方案1】:

那些零来自睡眠线。摆脱它们,你不需要它们。

另外,为了性能起见,如果您使用支持事务的架构,您应该添加:

START TRANSACTION
INSERT...
INSERT...
INSERT...
...
COMMIT

【讨论】:

  • 我不希望 0 作为输出。如果一切顺利,我不希望输出,仅在错误情况下。
  • 啊,那就让shell脚本做总和,如果总和为0则什么也不输出。
  • 我尽量不改变 PHP 应用程序(shell 脚本)的行为。
  • PHP是如何调用你列出的mysql命令的?你愿意改变那条线吗?如果是这样,您可以编写一个 bash 脚本(不更改 php),您需要更改的唯一行是 php 脚本调用的内容。
  • 你愿意改变 shell_exec 语句的 toe 内容吗?
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 2012-05-16
  • 2020-08-25
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多