首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中运行MySQL *.sql文件

在PHP中运行MySQL *.sql文件
EN

Stack Overflow用户
提问于 2010-10-27 04:36:51
回答 13查看 101.8K关注 0票数 52

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

附加信息

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

解决方案

使用shell_exec()...

代码语言:javascript
复制
$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"');

...I从来没有得到有用的输出,但在another thread上遵循了some suggestions,并最终使其全部正常工作。我将命令切换为--option=value格式,并使用--execute="SOURCE ..."而不是<来执行该文件。

而且,我从来没有很好地解释过shell_exec()exec()之间的区别。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-10-27 05:44:06

这个问题时不时会出现。没有好的解决方案可以直接从PHP运行.sql脚本。在一些边缘情况下,.sql脚本中常见的语句不能作为SQL语句执行。例如,mysql工具具有MySQL服务器无法识别的builtin commands,例如CONNECTTEESTATUSDELIMITER

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

我让这个测试正常工作:

代码语言:javascript
复制
$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');

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

票数 50
EN

Stack Overflow用户

发布于 2013-04-19 20:07:22

代码语言:javascript
复制
$commands = file_get_contents($location);   
$this->_connection->multi_query($commands);
票数 21
EN

Stack Overflow用户

发布于 2010-10-27 04:39:02

为此,您需要创建一个完整的SQL解析器。我建议您改用mysql命令行工具,从外部调用它。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4027769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档