我有两个*.sql文件,我在创建新网站数据库时使用它们.第一个文件创建所有表.第二个文件填充一些默认记录.我想从PHP执行这些文件.我还使用Zend_框架,如果这有助于实现这一点的话.

Additional Info

  1. 我没有控制台
  2. 我正在try 从应用程序中自动生成站点.

SOLUTION

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"');

...我从来没有得到有用的输出,但在another thread上跟随了some suggestions,最终使它全部工作.我将命令转换为--option=value格式,并使用--execute="SOURCE ..."而不是<来执行文件.

而且,我从来没有得到一个很好的解释shell_exec()exec()之间的区别.

推荐答案

这个问题时有发生.没有好的解决方案来运行一个.sql脚本直接来自PHP.在一些边缘情况下,语句在应用程序中很常见.sql脚本不能作为sql语句执行.例如,mysql工具有builtin commands个mysql服务器无法识别的内容,例如CONNECTTEESTATUSDELIMITER.

所以我给@Ignacio Vazquez Abrams的answer分+1.你应该go run .通过调用mysql工具(例如shell_exec())在PHP中编写sql脚本.


我做了个测试:

$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');

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

Mysql相关问答推荐

为什么IN子句中有GROUP BY会导致查询变得不可执行?

S优化联接更新的最佳方式是什么?

无法删除或更新父行:外键约束无法删除表

SQL:创建新列并将现有表中的值追加到新创建的列中

在MySQL中查找包含无效正则表达式的行

从连接表中try 按唯一ID计算行数 MySQL

在两个日期之间生成每个月的1行数据.

将递归 CTE 结果合并到辅助 SQL Select

排序子查询结果并返回每个 ID 的第一行

仅计算 DATEDIFF (MySQL) 中的工作日

过滤查询结果

如何在更新表单中使用 group by?在 SQL 中

Mysql Pivot 查询/建议

在 where 子句中左连接多个值

MySQL - 表'my_table'没有被锁定表锁定

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

Yii2 如何进行 where AND 或 OR 条件分组?

MySQL 更新连接表

如何在执行 sql 脚本时 echo 打印语句

MySql 两个时间戳之间的天数差异?