使用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";

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...