簡體   English   中英

從 PHP + PostgreSql 中的 sql 文件運行數據庫轉儲(恢復)

[英]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

所以我的問題是,有沒有辦法成功執行這個文件中的所有查詢?

我從這個問題中讀到了一種相關的解決方案,但它對我不起作用,因為它建議用分號拆分語句:

$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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM