php - 在 PHP 中运行 MySQL *.sql 文件

我有两个 *.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"');

...我从来没有得到有用的输出,但跟着 some suggestions在 another thread终于让一切正常了。我切换到 --option=value命令格式并使用 --execute="SOURCE ..."而不是 <执行文件。

另外,我从来没有很好地解释 shell_exec() 之间的区别。和 exec() .

最佳答案

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

所以我给@Ignacio Vazquez-Abrams 的 answer +1。您应该通过调用 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');

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

  • Loading .sql files from within PHP
  • is it possible to call a sql script from a stored procedure in another sql script?
  • PHP: multiple SQL queries in one mysql_query statement

https://stackoverflow.com/questions/4027769/

相关文章:

mysql - 从 MySQL 滚动删除旧行的最佳方法是什么?

mysql - 为什么 MySQL 会在 FULL OUTER JOIN 上报告语法错误?

mysql - 在 MySQL 中存储 IPv6 地址

sql - 如何选择一个空的结果集?

sql - 在 MySQL 中重命名外键列

java - hibernate 条件查询以获取特定列

javascript - 续表没有列 'id'

mysql - 拒绝访问;您需要(至少一个) super 权限才能执行此操作

mysql - 左外连接和左连接一样吗?

php - 在 PHP/MySQL 中将日期时间存储为 UTC