*.sql创建新的网站数据库时,我有两个文件。第一个文件创建所有表。第二个文件填充一些默认记录。我想从PHP执行这些文件。我还将使用Zend_Framework,如果这将有助于完成此任务。
*.sql
附加信息
解
使用shell_exec()…
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 ..."``<
--option=value``--execute="SOURCE ..."``<
另外,我从来没有得到的区别的一个很好的解释shell_exec()和exec()。
exec()
这个问题不时出现。没有直接从PHP运行.sql脚本的好的解决方案。在某些情况下,.sql脚本中常见的语句不能作为SQL语句执行。例如,MySQL的工具已经内置命令不是由MySQL服务器的认可,例如CONNECT,TEE,STATUS,和DELIMITER。
CONNECT
TEE
STATUS
DELIMITER
所以我给+1 @Ignacio Vazquez- Abrams的答案。您应该通过调用mysql工具在PHP中运行.sql脚本,例如使用shell_exec()。
mysql
我得到了这个测试的工作:
$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');
另请参阅我对以下相关问题的回答: