一尘不染

在PHP中运行MySQL * .sql文件

mysql

*.sql创建新的网站数据库时,我有两个文件。第一个文件创建所有表。第二个文件填充一些默认记录。我想从PHP执行这些文件。我还将使用Zend_Framework,如果这将有助于完成此任务。

附加信息

  1. 我没有控制台访问权限
  2. 我正在尝试从我们的应用程序中自动生成网站。

使用shell_exec()

$command = 'mysql'
        . ' --host=' . $vals['db_host']
        . ' --user=' . $vals['db_user']
        . ' --password=' . $vals['db_pass']
        . ' --database=' . $vals['db_name']
        . ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');

…我从来没有得到过有用的输出,但是在另一个线程上遵循了一些建议,最终使它们全部正常工作。我将命令切换为格式,而不是用来执行文件。--option=value``--execute="SOURCE ..."``<

另外,我从来没有得到的区别的一个很好的解释shell_exec()exec()


阅读 518

收藏
2020-05-17

共1个答案

一尘不染

这个问题不时出现。没有直接从PHP运行.sql脚本的好的解决方案。在某些情况下,.sql脚本中常见的语句不能作为SQL语句执行。例如,MySQL的工具已经内置命令不是由MySQL服务器的认可,例如CONNECTTEESTATUS,和DELIMITER

所以我给+1 @Ignacio Vazquez-
Abrams的答案。您应该通过调用mysql工具在PHP中运行.sql脚本,例如使用shell_exec()


我得到了这个测试的工作:

$command = "mysql --user={$vals['db_user']} --password='{$vals['db_pass']}' "
 . "-h {$vals['db_host']} -D {$vals['db_name']} < {$script_path}";

$output = shell_exec($command . '/shellexec.sql');

另请参阅我对以下相关问题的回答:

2020-05-17