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)