mysqldump не работи през php

Опитвам се да взема mysqldump на база данни чрез php, мога да взема база данни само през командния ред по този начин.

d:
cd "d:\wamp\bin\mysql\mysql5.5.24\bin"
mysqldump.exe
mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"

когато се опитвам да изпълня тази команда от php по този начин, получавам празен дъмп файл.

$cmd  = 'd: cd "d:/wamp/bin/mysql/mysql5.5.24/bin"mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);

или по този начин

$cmd  = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);

или по този начин

$cmd  = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);

Получавам само празен дъмп файл. минах през много въпроси тук като този и това и много повече, но нито едно от тези решения не работи за мен.

Моля, вижте и предложете всеки възможен начин да го направите.

Благодаря.


person Community    schedule 24.11.2012    source източник


Отговори (1)


Изглежда, че използвате Windows, начинът за създаване на редове с множество команди е да използвате оператора „&“ (повече информация)

Пример:

$cmd  = 'd: & cd "d:/wamp/bin/mysql/mysql5.5.24/bin" & mysqldump.exe --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);

Също така, проверете отново пътищата си, защото използвате d:/wamp/... и по-късно D:\dump\test.sql, изглежда, че вашата команда използва наклонена черта и антинаклонена черта и само \ трябва да работи.

Най-накрая можете да отстраните грешки в командата си, като използвате втори аргумент за exec :

$output = array();
exec($cmd, $output);
var_dump($output);
person Alain Tiemblo    schedule 24.11.2012
comment
уау, това проработи, не знаех как да направя мулти-команда, благодаря много. - person ; 24.11.2012
comment
също така, моля, кажете ми кое е по-добре да използвам system($cmd) или exec($cmd). - person ; 24.11.2012
comment
Можете да разгледате този уебсайт, който ви дава хубави обяснения или вижте този отговор. - person Alain Tiemblo; 24.11.2012
comment
ако използвам user=$username insted, ако user=user не работи, как да го накарам да работи с потребителско име, съхранено в променлива. Благодаря. - person ; 24.11.2012
comment
по този начин: ...--user='.escapeshellarg($username).' --password='.escapeshelarg... защото вашият низ е между единични кавички (повече информация). Също така имайте предвид escapeshellarg, използван за защита на вашата команда срещу инжектиране на шел код. - person Alain Tiemblo; 24.11.2012