我有两个 *.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"');
...我从来没有得到有用的输出,但跟着 some suggestions在 another thread终于让一切正常了。我切换到 --option=value
命令格式并使用 --execute="SOURCE ..."
而不是 <
执行文件。
另外,我从来没有很好地解释 shell_exec()
之间的区别。和 exec()
.
最佳答案
这个问题不时出现。直接从 PHP 运行 .sql 脚本没有好的解决方案。在某些极端情况下,.sql 脚本中的常见语句无法作为 SQL 语句执行。例如,mysql 工具具有 MySQL 服务器无法识别的 builtin commands,例如CONNECT
、TEE
、STATUS
和 DELIMITER
。
所以我给@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');
另请参阅我对这些相关问题的回答:
https://stackoverflow.com/questions/4027769/