【发布时间】:2012-08-27 16:11:14
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
PDO 是否配置为在出错时抛出异常?
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);另外,请向我们展示用于运行此查询的 PHP 代码。 -
是的 - 添加了 PHP 代码 - 还发现了另一个奇怪的地方。如果我更改语句的顺序 - 只有第一个被执行。因此,每个语句都独立工作。换行符或分号有什么用吗?
-
可以,你应该用分号
;分割文件内容,分别执行。试试看。 -
三个
CREATE TABLE语句是否都在一个文件中?你是一次全部通过吗? (不太确定,但可能 PDO_SQLITE3 只允许单个语句。)