SQLite3::openBlob

BLOB を読み取るためのストリームリソースを開く

説明

public resourcefalse SQLite3::openBlob(
    string $table,
    string $column,
    int $rowid,
    string $database = "main",
    int $flags = SQLITE3_OPEN_READONLY
)

BLOB を読み書きするためのストリームリソースを開きます。 これは、以下によって選択されます:

SELECT column FROM database.table WHERE rowid = rowid

注意: ストリームに書き込むことで、BLOBのサイズを変更することは不可能です。 BLOB のサイズを望んだサイズに設定するには、代わりに UPDATE 文を実行するか、 SQLite の zeroblob() 関数を使ってください。

パラメータ

table

テーブル名

column

カラム名

rowid

行ID

database

DB のシンボリック名

flags

SQLITE3_OPEN_READONLY または SQLITE3_OPEN_READWRITE を指定します。 それぞれ、読み取り専用でストリームを開くか、 読み取りと書き込みができるようにストリームを開きます。

戻り値

ストリームリソースを返します。 失敗した場合に false を返します

変更履歴

バージョン 説明
7.2.0 flags が追加されました。 BLOB に書き込むことができます。これより前のバージョンでは、読み取りのみがサポートされていました。

例1 SQLite3::openBlob の例

<?php
$conn = new SQLite3(':memory:');
$conn->exec('CREATE TABLE test (text text)');
$conn->exec("INSERT INTO test VALUES ('Lorem ipsum')");
$stream = $conn->openBlob('test', 'text', 1);
echo stream_get_contents($stream);
fclose($stream); // mandatory, otherwise the next line would fail
$conn->close();
?>

上の例の出力は以下となります。

Lorem ipsum

例2 インクリメンタルにBLOBに書き込む

<?php
$conn = new SQLite3(':memory:');
$conn->exec('CREATE TABLE test (text text)');
$conn->exec("INSERT INTO test VALUES (zeroblob(36))");
$stream = $conn->openBlob('test', 'text', 1, 'main', SQLITE3_OPEN_READWRITE);
for ($i = 0; $i < 3; $i++) {
    fwrite($stream,  "Lorem ipsum\n");
}
fclose($stream);
echo $conn->querySingle("SELECT text FROM test");
$conn->close();
?>

上の例の出力は以下となります。

Lorem ipsum
Lorem ipsum
Lorem ipsum