我有两个 *.sql
我在创建新网站数据库时使用的文件。第一个文件创建所有表。第二个文件填充了一些默认记录。我想从 PHP 执行这些文件。我也使用 Zend_Framework,如果这将有助于实现这一点。
附加信息
- 我没有控制台访问权限
- 我正在尝试从我们的应用程序中自动生成站点。
解决方案
使用 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()
之间的区别。
原文由 Sonny 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个问题时不时出现。直接从 PHP 运行 .sql 脚本没有好的解决方案。在某些极端情况下,.sql 脚本中的常见语句无法作为 SQL 语句执行。 For example, the mysql tool has builtin commands that are not recognized by the MySQL Server, eg
CONNECT
,TEE
,STATUS
, andDELIMITER
。所以我给@Ignacio Vazquez-Abrams 的 回答 +1。您应该通过调用
mysql
工具在 PHP 中运行您的 .sql 脚本,例如使用shell_exec()
。我得到了这个测试:
另请参阅我对这些相关问题的回答: