运行 来自 sql 文件的数据库转储(恢复)在 PHP + PostgreSql

Run a database dump (Restore) from an sql file in PHP + PostgreSql

我正在尝试创建一个系统,用户可以在其中创建数据库并从 UI 中填充它,这与大多数 CMS 的安装非常相似。我可以通过编程方式创建数据库,但是创建和填充表是我面临的挑战。

我有一个包含这些表格和数据的模板 sql 文件,偶尔会通过转储更新这些表格和数据,这就是我正在做的事情:

try {
        $dbTablesAndData = file_get_contents('path/to/template.sql');
        $db = setDBConnection($clientDb);
        $query = $db->prepare("$dbTablesAndData");
        $query->execute( array() );

      } catch (PDOException $e) {
        $app->response()->setStatus(401);
        $app->response()->headers->set('Content-Type', 'application/json');
        echo  json_encode(array('response' => 'error', 'data' => $e->getMessage() ));
      }

运行时出现错误:cannot insert multiple commands into prepared statement

所以我的问题是,有没有办法成功执行此文件中的所有查询?

我从 this question 那里读到了一种相关的解决方案,但它对我不起作用,因为它建议用分号分割语句:

$statements = explode(';', $script);
foreach($statements as $sql){
    if($sql === '') { continue; }
    $query = $pdo->prepare($sql);
    $query->execute();
    if($query->errorCode() !== '00000'){ die("ERROR: SQL error code: ".$query->errorCode()."\n"); }
}

但是我的 sql 文件包含分号不应该分开的情况,比如在创建函数时声明变量等。我有什么办法可以解决这个问题吗?

找到了解决办法。显然它只适用于 PDO,你不能 运行 多个命令。所以像 pg_query() 这样的东西就足够了,而不是 prepare()