PHP:mysqldump:无法找到表格:">"

时间:2015-10-10 21:46:30

标签: php

我尝试使用mysqldump制作简单的PHP脚本来备份数据库,但是我收到了这个错误:

mysqldump: Couldn't find table: ">"

这是我写作的功能:

 protected function dump($params, $dbs, $backup_folder)
    {
        if (!is_writable($backup_folder)) {
            throw new Exception(sprintf('The backup folder is not writable: %s',
                                        $backup_folder));
        }

        $backup_folder = trim($backup_folder, "/"); // be sure that there is no / at the end

        $baseCmd = 'mysqldump --hex-blob --routines --skip-lock-tables -h%s -u%s -p%s %s > %s';
        foreach ($dbs as $db) {
            $dest = sprintf('%s/%s', $backup_folder,
                            $db . '_' . date('YmdHis') . '.sql');
            $cmd = sprintf($baseCmd, $params['host'], $params['user'],
                           $params['password'], $db, $dest);
            echo "Exec: $cmd: ";

            $last = system(escapeshellcmd($cmd), $res);

            echo $res;

            if ( 0 !== $res) {
                echo "Fail";
            } else {
                echo "Done \n";
            }
        }
    }

此功能打印的命令提供:

mysqldump --hex-blob --routines --skip-lock-tables -hdb-backup -uroot -pMyPwd my_db_name > backups/my_db_name_20151010232734.sql

当我从Shell执行此命令时,它的效果非常好,但不是来自Php脚本。

我的配置是:

  • 我的桌面系统外壳:Ubuntu 15.04
  • Mysql Server:安装在Ubuntu Server 15.04中的Mysql 5.6
  • PHP版本:5.6.4

任何帮助?

谢谢

1 个答案:

答案 0 :(得分:1)

escapeshellcmd()命令会将\添加到>

来自PHP documentation

  

以下字符前面加一个反斜杠:#&amp ;;` | *?〜<> ^()[] {} $ \,\ x0A和\ xFF。

您应该使用escapeshellarg()单独转义每个参数,或者确保您的方法参数($params$db$backup_folder)有效并且不要t包含其中一个字符,只需使用

system($cmd, $res)

我希望这有帮助!