运行 MySQL *.sql PHP 中的文件

2022-08-30 10:15:45

我有两个文件,我在创建新的网站数据库时使用。第一个文件创建所有表。第二个文件填充一些默认记录。我想从PHP执行这些文件。我也使用Zend_Framework,如果这将有助于实现这一目标的话。*.sql

附加信息

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


答案 1

这个问题不时出现。没有直接从PHP运行.sql脚本的良好解决方案。在某些情况下,.sql脚本中常见的语句不能作为 SQL 语句执行。例如,mysql工具具有MySQL服务器无法识别的内置命令,例如,,,,和。CONNECTTEESTATUSDELIMITER

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


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

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

另请参阅我对这些相关问题的回答:


答案 2
$commands = file_get_contents($location);   
$this->_connection->multi_query($commands);

推荐