#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').'".....