我正在从Navicat创建的数据库转储中创建SQLite数据库中的表。
在我正在运行的3个CREATE TABLE查询中,2个失败,1个工作 - 因此它不是权限/连接/配置问题。
这是SQL:
CREATE TABLE "servers" (
"id" INTEGER NOT NULL,
"name" TEXT(32) NOT NULL,
"type" INTEGER NOT NULL,
"host" TEXT(128) NOT NULL,
"port" INTEGER NOT NULL,
"rcon_port" INTEGER NOT NULL,
PRIMARY KEY ("id")
);
CREATE TABLE "config" ("built" INTEGER NOT NULL);
CREATE TABLE "users" (
"id" INTEGER NOT NULL,
"username" TEXT(32) NOT NULL,
"password" TEXT(64) NOT NULL,
"salt" TEXT(8) NOT NULL,
"last_login" INTEGER NOT NULL,
PRIMARY KEY ("id")
);
尝试运行此操作 - 仅创建config
表。
我可以用Navicat执行这个脚本并创建表格 - 这有什么语法错误吗?
也没有抛出任何错误/异常
PHP:
确认 $path
和$sql
是正确的
$db_conn = 'sqlite:' . $path;
try {
$dbh = new PDO($db_conn);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query(file_get_contents($sql);
} catch (Exception $e) {
var_dump($e);
exit;
}
答案 0 :(得分:2)
尝试将文件分成单个查询并运行:
$db_conn = 'sqlite:' . $path;
$queries = file_get_contents($sql);
try {
$dbh = new PDO($db_conn);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$queries = explode(";", $queries);
foreach ($queries as $query) {
$dbh->query($query);
}
} catch (Exception $e) {
var_dump($e);
exit;
}
答案 1 :(得分:0)
SQLite syntax diagram在列表之后和PRIMARY KEY声明之前不包含逗号。由于这是失败的表之间最明显的区别,请先尝试。