PHP Conference Japan 2024

SQLite3::query

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SQLite3::query執行 SQL 查詢

說明

public SQLite3::query(string $query): SQLite3Result|false

執行 SQL 查詢,並傳回 SQLite3Result 物件。如果查詢沒有產生結果(例如 DML 陳述式),傳回的 SQLite3Result 物件實際上無法使用。對於這類查詢,請改用 SQLite3::exec()

參數

query

要執行的 SQL 查詢。

傳回值

傳回 SQLite3Result 物件,失敗時傳回 false

範例

範例 1 SQLite3::query() 範例

<?php
$db
= new SQLite3('mysqlitedb.db');

$results = $db->query('SELECT bar FROM foo');
while (
$row = $results->fetchArray()) {
var_dump($row);
}
?>

新增註解

使用者貢獻的註解 2 則註解

38
bohwaz
11 年前
建議的 SQLite3 查詢方式是使用陳述式。對於建立表格來說,查詢可能很好(也比較簡單),但對於插入、更新或選擇來說,您真的應該使用陳述式,它真的更容易且更安全,因為 SQLite 會根據其型別逸出您的參數。SQLite 也會比您自己建立整個查詢使用更少的記憶體。範例

<?php

$db
= new SQLite3;
$statement = $db->prepare('SELECT * FROM table WHERE id = :id;');
$statement->bindValue(':id', $id);

$result = $statement->execute();

?>

您也可以重複使用陳述式並變更其參數,只需執行 $statement->reset()。最後,當您不再需要陳述式時,別忘了關閉它,因為它會釋放一些記憶體。
6
paule-panke at example dot com
7 年前
在呼叫 SQLite3Result::fetchArray() 之前,請使用 SQLite3Result::numColumns() 檢查是否為空結果。

與文件相反,SQLite3::query() 總是傳回 SQLite3Result 實例,而不僅僅是傳回列的查詢 (SELECT, EXPLAIN)。每次在無結果查詢的結果上呼叫 SQLite3Result::fetchArray() 時,查詢會在內部再次執行,這很可能會破壞您的應用程式。
對於框架或 API 來說,事先不可能知道查詢是否會傳回列(SQLite3 支援多重陳述式查詢)。因此,「不要執行 query('CREATE ...')」的論點無效。
To Top