Выборочный сброс данных с помощью 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' => $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>amp;1";

        exec($command, $output);

        Yii::$app->response->format = yiiwebResponse::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 работает нормально.

Комментарии:

1. это сложно, ваша переменная должна быть в кавычках, но вы уже использовали оба варианта

2. Нравится это? —где=»program = ‘myvalue'»

Ответ №1:

Вам нужно указать $request->post(‘курс’) с "

Который избежит двойной кавычки

Нравится

 $command = "mysqldump --user={$db['user']} --password={$db['pass']} --host={$db['host']} {$db['base']} verification --where='program = "".$request->post('course').""' --result-file={$mysql_file} 2>amp;1";
  

Комментарии:

1. Потрясающе! Большое вам спасибо. Я совершенно забыл о »

Ответ №2:

Почему бы просто не разделить команду таким образом? Я не разработчик yii, но это то, что я бы сделал на java / php или чем-либо еще

 'mysqldump --user='.{$db['user']}.' --password='.{$db['pass']}.' --host='.{$db['host']}.' '.{$db['base']}.' verification --where=program = "'.$request->post('course').'".....