我有两个*.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"');
...I从来没有得到有用的输出,但在another thread上遵循了some suggestions,并最终使其全部正常工作。我将命令切换为--option=value
格式,并使用--execute="SOURCE ..."
而不是<
来执行该文件。
而且,我从来没有很好地解释过shell_exec()
和exec()
之间的区别。
发布于 2010-10-27 05:44:06
这个问题时不时会出现。没有好的解决方案可以直接从PHP运行.sql脚本。在一些边缘情况下,.sql脚本中常见的语句不能作为SQL语句执行。例如,mysql工具具有MySQL服务器无法识别的builtin commands,例如CONNECT
、TEE
、STATUS
和DELIMITER
。
所以我给@Ignacio Vazquez-艾布拉姆斯的answer加+1。您应该在PHP中通过调用mysql
工具来运行.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');
另请参阅我对以下相关问题的回答:
发布于 2013-04-19 20:07:22
$commands = file_get_contents($location);
$this->_connection->multi_query($commands);
发布于 2010-10-27 04:39:02
为此,您需要创建一个完整的SQL解析器。我建议您改用mysql
命令行工具,从外部调用它。
https://stackoverflow.com/questions/4027769
复制相似问题