3

Navicatによって作成されたデータベースダンプからSQLiteデータベースにテーブルを作成しています。

私が実行している3つのCREATETABLEクエリのうち、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 に答える