3

我正在从 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;
}
4

2 回答 2

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;
}
于 2012-09-02T19:54:01.103 回答
0

SQLite 语法图在列列表之后和 PRIMARY KEY 声明之前不包括逗号。由于这是失败的表之间最明显的区别,因此请先尝试。

于 2012-09-02T19:42:19.910 回答