如何解决使用mysqldump选择性地转储数据
我需要使用WHERE从数据库中导出表。只有结果与条件。 我使用yii2:
$mysql_file = Yii::getAlias('@app/mysqldump.sql');
preg_match('#mysql:host=([^;]+);dbname=(.*)#',Yii::$app->components['db']['dsn'],$dbmatch);
$db = [
'host' => $dbmatch[1],'user' => Yii::$app->components['db']['username'],'pass' => Yii::$app->components['db']['password'],'base' => $dbmatch[2]
];
$command = "mysqldump --user={$db['user']} --password={$db['pass']} --host={$db['host']} {$db['base']} verification --where='program = ".$request->post('course')."' --result-file={$mysql_file} 2>&1";
exec($command,$output);
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
header('Content-Type: application/sql');
header('Content-Disposition: attachment; filename=dump-'.$dbmatch[2].'_'.date('YmdHis').'.sql');
header('Last-Modified: '.gmdate('D,d M Y H:i:s',filemtime($mysql_file)).' GMT',true,200);
header('Content-Length: '.filesize($mysql_file));
readfile($mysql_file);
这里的问题:
--where='program = ".$request->post('course')."'
产生这样的转储文件:
--
-- Dumping data for table `verification`
--
-- WHERE: program = a1n2
在任何地方都无法正常工作。
解决方法
为什么不只是以这种方式拆分命令?我不是yii开发人员,但我将在java / php或其他任何方式中做
'mysqldump --user='.{$db['user']}.' --password='.{$db['pass']}.' --host='.{$db['host']}.' '.{$db['base']}.' verification --where=program = "'.$request->post('course').'".....
,
您需要用\"
引用$ request-> post('course')
哪些会转义双引号
喜欢
$command = "mysqldump --user={$db['user']} --password={$db['pass']} --host={$db['host']} {$db['base']} verification --where='program = \"".$request->post('course')."\"' --result-file={$mysql_file} 2>&1";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。