PHP
SQLite3
サーチ…
データベースのクエリ
<?php
//Create a new SQLite3 object from a database file on the server.
$database = new SQLite3('mysqlitedb.db');
//Query the database with SQL
$results = $database->query('SELECT bar FROM foo');
//Iterate through all of the results, var_dumping them onto the page
while ($row = $results->fetchArray()) {
var_dump($row);
}
?>
http://www.riptinar.com/topic/184も参照してください。
1つの結果のみを取得する
LIMIT SQL文の使用に加えて、SQLite3関数querySingle
を使用して、単一の行または最初の列を取得することもできます。
<?php
$database = new SQLite3('mysqlitedb.db');
//Without the optional second parameter set to true, this query would return just
//the first column of the first row of results and be of the same type as columnName
$database->querySingle('SELECT column1Name FROM table WHERE column2Name=1');
//With the optional entire_row parameter, this query would return an array of the
//entire first row of query results.
$database->querySingle('SELECT column1Name, column2Name FROM user WHERE column3Name=1', true);
?>
SQLite3クイックスタートチュートリアル
これは、よく使用されるすべてのSQLite関連APIの完全な例です。その目的は、あなたを本当に素早く動かすことです。また、このチュートリアルの実行可能なPHPファイルを取得することもできます 。
データベースの作成/オープン
最初に新しいデータベースを作成しましょう。ファイルが存在しない場合にのみ作成し、読み取り/書き込み用にファイルを開きます。ファイルの拡張子はあなた次第ですが、 .sqlite
はかなり一般的で自明です。
$db = new SQLite3('analytics.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);
テーブルの作成
$db->query('CREATE TABLE IF NOT EXISTS "visits" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"user_id" INTEGER,
"url" VARCHAR,
"time" DATETIME
)');
サンプルデータを挿入する。
アトミック性を気にしなくても、関連する問合せをトランザクション(キーワードBEGIN
およびCOMMIT
)にラップすることをお薦めします。これをしないと、SQLiteはトランザクション内のすべてのクエリを自動的にラップするので、すべての処理が大幅に遅くなります。 SQLiteを初めてお使いの方は 、 INSERTがとても遅いのに驚くかもしれません。
$db->exec('BEGIN');
$db->query('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (42, "/test", "2017-01-14 10:11:23")');
$db->query('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (42, "/test2", "2017-01-14 10:11:44")');
$db->exec('COMMIT');
準備ができていない可能性のあるデータを準備文で挿入します。 名前付きパラメータでこれを行うことができます :
$statement = $db->prepare('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (:uid, :url, :time)');
$statement->bindValue(':uid', 1337);
$statement->bindValue(':url', '/test');
$statement->bindValue(':time', date('Y-m-d H:i:s'));
$statement->execute(); you can reuse the statement with different values
データの取得中
今日のユーザー#42の訪問を取得しましょう。準備された文を再度使用しますが 、今回は番号付きのパラメータを使用します。これはより簡潔です。
$statement = $db->prepare('SELECT * FROM "visits" WHERE "user_id" = ? AND "time" >= ?');
$statement->bindValue(1, 42);
$statement->bindValue(2, '2017-01-14');
$result = $statement->execute();
echo "Get the 1st row as an associative array:\n";
print_r($result->fetchArray(SQLITE3_ASSOC));
echo "\n";
echo "Get the next row as a numeric array:\n";
print_r($result->fetchArray(SQLITE3_NUM));
echo "\n";
注意:これ以上行がない場合、fetchArray()は
false
返しfalse
。while
ループでこれを利用できます。
メモリを解放する - スクリプトが実行されている間、自動的には行われない
$result->finalize();
簡略
連想配列として単一の行を取得するための便利な省略形があります。 2番目のパラメータは、選択したすべての列が必要なことを意味します。
注意しておきますが、この省略形はパラメータのバインディングをサポートしていませんが、代わりに文字列をエスケープできます。値は必ず一重引用符で囲みます!テーブルとカラムの名前には二重引用符が使用されます(MySQLのバッククックに似ています)。
$query = 'SELECT * FROM "visits" WHERE "url" = \'' .
SQLite3::escapeString('/test') .
'\' ORDER BY "id" DESC LIMIT 1';
$lastVisit = $db->querySingle($query, true);
echo "Last visit of '/test':\n";
print_r($lastVisit);
echo "\n";
1つの値を取得するための便利な別の便利な方法です。
$userCount = $db->querySingle('SELECT COUNT(DISTINCT "user_id") FROM "visits"');
echo "User count: $userCount\n";
echo "\n";
清掃
最後に、データベースを閉じます。これは、スクリプトが終了したときに自動的に行われます。
$db->close();