运行 来自 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()
我正在尝试创建一个系统,用户可以在其中创建数据库并从 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()