【发布时间】:2021-02-04 14:51:09
【问题描述】:
我正在尝试创建一个系统,用户可以在其中创建数据库并从 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 文件包含不应该拆分分号的情况,例如在创建函数时声明变量等。有什么办法可以解决这个问题吗?
【问题讨论】:
标签: php sql postgresql postgresql-12