什么';在Postgres DB上运行PHP批处理SQL脚本(Kohana)的首选方法是什么

什么';在Postgres DB上运行PHP批处理SQL脚本(Kohana)的首选方法是什么,php,sql,postgresql,kohana,phpunit,Php,Sql,Postgresql,Kohana,Phpunit,我正在为Kohana 3.2项目设置Postgres数据库测试。我想创建一个临时模式,从文件中运行几个sql脚本来建立模式,然后进行测试,然后将临时模式放到tearDown中 我曾尝试使用file_get_contents($sqlfilename)获取脚本的内容,然后使用Kohana的DB:query(),但这是一种黑客行为,无论如何都无法正常工作 pg_execute将不工作,因为文件是批处理脚本 我应该使用exec()运行psql命令吗 从PHP在Postgres DB上运行批处理脚本的最

我正在为Kohana 3.2项目设置Postgres数据库测试。我想创建一个临时模式,从文件中运行几个sql脚本来建立模式,然后进行测试,然后将临时模式放到tearDown中

我曾尝试使用file_get_contents($sqlfilename)获取脚本的内容,然后使用Kohana的DB:query(),但这是一种黑客行为,无论如何都无法正常工作

pg_execute将不工作,因为文件是批处理脚本

我应该使用exec()运行psql命令吗

从PHP在Postgres DB上运行批处理脚本的最佳/首选方法是什么

谢谢

可以运行多个语句:

查询 要执行的SQL语句。将多个语句传递给函数时,它们将自动执行 作为一个事务,除非有明确的BEGIN/COMMIT命令 包含在查询字符串中。但是,在中使用多个事务 不建议一次函数调用

应正确转义查询中的数据

因此,运行批处理脚本的黑客方法是:

pg_query($conn, "BEGIN; COMMIT;\n" . file_get_contents($filename));
我能想到的唯一正确的选择是作为外部程序运行
psql

system("psql < " . escapeshellarg($filename));
system(“psql<”.escapeshellarg($filename));
这两个我都没试过。祝你好运。

pg\u query($conn,“BEGIN;COMMIT;\n”).file\u get\u contents($filename))工作得很好,即使它有点黑客!谢谢