Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要导出查询,而不是为没有触发器的mysqldump创建文件_Php_Mysql_Triggers_Export_Mysqldump - Fatal编程技术网

Php 需要导出查询,而不是为没有触发器的mysqldump创建文件

Php 需要导出查询,而不是为没有触发器的mysqldump创建文件,php,mysql,triggers,export,mysqldump,Php,Mysql,Triggers,Export,Mysqldump,我的代码是 $db_name = "db"; $outputfile = "/somewhere"; $new_db_name = 'newdb'; $cmd = 'mysqldump --skip-triggers %s > %s 2>&1'; $cmd = sprintf($cmd, escapeshellarg($db_name), escapeshellcmd($output_file)); exec($cmd, $output, $ret); if ($ret

我的代码是

$db_name = "db";
$outputfile = "/somewhere";
$new_db_name = 'newdb';

$cmd = 'mysqldump --skip-triggers %s > %s  2>&1';
$cmd = sprintf($cmd, escapeshellarg($db_name), escapeshellcmd($output_file));
exec($cmd, $output, $ret); 
if ($ret !=0 ) {
    //log error message in $output
}
然后输入:

$cmd = 'mysql --database=%s < %s 2>&1';
$cmd = sprintf($cmd, escapeshellarg($new_db_name), escapeshellcmd($output_file));
exec($cmd, $output, $ret); 
//etc.

unlink($outputfile);
$cmd='mysql--database=%s<%s2>&1';
$cmd=sprintf($cmd,escapeshellarg($new_db_name),escapeshellcmd($output_file));
exec($cmd,$output,$ret);
//等等。
取消链接($outputfile);
但是在这里,我应该做些什么来获取导出查询,而不是每次都创建一个文件

编辑:

在马特的回复中

  • 我正在使用Windows,您提供的代码是否可以工作,因为我不确定我已经提供的代码是否可以在Windows中工作,因为它似乎是linux命令
  • 我需要在PHP中编写脚本,这是在joomla中安装组件时将触发的过程
  • 什么是PHP中的管道

    • 您必须在PHP中执行此操作吗?您可以在带有一些基本管道的端子中轻松地执行此操作(无需创建任何文件)

      两个命令就完成了:

      echo 'create database foo2' | mysql -uroot
      mysqldump --skip-triggers -uroot foo | mysql -uroot foo2
      
      这会将
      foo
      复制到新数据库
      foo2

      请注意,可以。。但是真的,你应该在shell(IMO)中这样做

      编辑:

      哎呀,不知什么原因,我以为你想要触发器。在上面编辑以包括
      --跳过触发器

      编辑2:

      “管道”指的是布线
      stdout
      stdin

      Windows支持管道。以上命令在Windows上对我有效

      但是,我无法通过PHP和Windows使用管道(至少对于
      mysql
      )。这就像来自
      proc\u open
      的流忽略我的输入

      因此,另一种选择是接受我上面提供的命令,将它们放在
      .bat
      文件中,然后看看是否可以通过

      最终编辑

      你需要做一些研究,因为我不能解释每一个小细节。您是否参考了我指向的
      system()
      文档?它允许您调用系统命令

      我的建议是制作一个基本脚本,称之为
      bla.bat

      @echo off
      echo create database foo2 | mysql -uroot
      mysqldump --skip-triggers -uroot foo | mysql -uroot foo2
      
      如果与脚本位于同一文件夹中,则脚本可以执行以下操作:

      <?php
      system('cmd.exe /C ' . dirname(__FILE__).'\\bla.bat');
      

      @Matt不介意,但对我来说一切听起来都很复杂,你能给我一个漂亮的,正是我想要的:o)