【问题标题】:mysqldump not working through phpmysqldump无法通过php工作
【发布时间】:2012-11-12 10:31:57
【问题描述】:

我正在尝试通过 php 获取数据库的 mysqldump,我只能通过这种方式通过命令行获取数据库转储。

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);

我只得到空的转储文件。 我在这里遇到了很多问题,例如 thisthis 等等,但没有一个解决方案对我有用。

请查看并提出任何可行的方法。

谢谢。

【问题讨论】:

    标签: php mysql command-line mysqldump


    【解决方案1】:

    你好像用的是windows,创建多命令行的方法是使用'&'操作符(more info

    例子:

    $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);
    

    【讨论】:

    • 哇,好用,不知道怎么做多命令,非常感谢。
    • 也请告诉我哪个更好使用system($cmd)exec($cmd)
    • 你可以看看this website,他会给你很好的解释,或者看看this answer
    • 如果我使用user=$username insted 如果user=user 不起作用,如何使其与存储在变量中的用户名一起使用。谢谢。
    • 这样:...--user='.escapeshellarg($username).' --password='.escapeshelarg... 因为你的字符串在单引号之间 (more info)。另请注意 escapeshellarg 用于保护您的命令免受 shell 代码注入。
    猜你喜欢
    • 2015-09-06
    • 2012-07-25
    • 2018-12-18
    • 2015-07-10
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2016-07-13
    • 2012-10-13
    相关资源
    最近更新 更多