使用mysqldump选择性地转储数据
我需要使用WHERE从数据库中导出一个表。只有在有条件的情况下才有结果。 我使用yii2:使用mysqldump选择性地转储数据,mysql,yii2,Mysql,Yii2,我需要使用WHERE从数据库中导出一个表。只有在有条件的情况下才有结果。 我使用yii2: $mysql_file = Yii::getAlias('@app/mysqldump.sql'); preg_match('#mysql:host=([^;]+);dbname=(.*)#', Yii::$app->components['db']['dsn'], $dbmatch); $db = [ 'host' =>
$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
没有WHERE工作正常。为什么不以这种方式拆分命令?我不是一个yii开发人员,但这是我在java/php或其他任何东西中所做的
'mysqldump --user='.{$db['user']}.' --password='.{$db['pass']}.' --host='.{$db['host']}.' '.{$db['base']}.' verification --where=program = "'.$request->post('course').'".....
为什么不以这种方式拆分命令?我不是一个yii开发人员,但这是我在java/php或其他任何东西中所做的
'mysqldump --user='.{$db['user']}.' --password='.{$db['pass']}.' --host='.{$db['host']}.' '.{$db['base']}.' verification --where=program = "'.$request->post('course').'".....
你需要用
\“
这将避免双重引用
像
你需要用
\“
这将避免双重引用
像
这很棘手,你的变量必须用引号括起来,但你已经用光了两个变量,像这样吗--where=“program='myvalue'”这很棘手,您的变量必须用引号括起来,但您已经用光了这两个变量,像这样吗--where=“program='myvalue'”太棒了!非常感谢你。我完全忘记了“太棒了!非常感谢。我完全忘记了”