对于Sqlite,CREATE TABLE部分失败,使用PHP + PDO

时间:2012-09-02 19:35:35

标签: php sqlite pdo

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

2 个答案:

答案 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声明之前不包含逗号。由于这是失败的表之间最明显的区别,请先尝试。