此函式永遠只傳回 5,表示 SQLITE3_NULL。SQLite 3 沒有欄位類型,它有欄位親和性。同一個表格的不同列(以及 SELECT 產生的列)可以保存不同類型的值。因此,這個 API 無法傳回任何有用的資訊,而且該方法似乎使用 SQLITE3_NULL 作為佔位符。
此函式無用,應該在未來的版本中移除或標記為已棄用,以免讓任何程式設計師誤以為傳回的值是有用的。
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SQLite3Result::columnType — 傳回第 n 個欄位的類型
column
欄位的數字索引,從零開始。
傳回由 column
指定之欄位的資料類型索引(為 SQLITE3_INTEGER
、SQLITE3_FLOAT
、SQLITE3_TEXT
、SQLITE3_BLOB
或 SQLITE3_NULL
其中之一),若欄位不存在則傳回 false
。
此函式永遠只傳回 5,表示 SQLITE3_NULL。SQLite 3 沒有欄位類型,它有欄位親和性。同一個表格的不同列(以及 SELECT 產生的列)可以保存不同類型的值。因此,這個 API 無法傳回任何有用的資訊,而且該方法似乎使用 SQLITE3_NULL 作為佔位符。
此函式無用,應該在未來的版本中移除或標記為已棄用,以免讓任何程式設計師誤以為傳回的值是有用的。
要找出欄位的類型,您需要「查詢」SQL 語句,「fetchArray」第一列,然後提取每個欄位的名稱和類型。
範例
function _sqlite_fetch_all( $db, $sql ) {
$sqlite = new SQLite3( $db);
if( $sqlite->lastErrorCode() ) return;
$result = $sqlite->query( $sql );
$result->fetchArray( SQLITE3_NUM );
$fieldnames = [];
$fieldtypes = [];
for( $colnum=0; $colnum<$result->numColumns(); $colnum++) {
$fieldnames[] = $result->columnName($colnum);
$fieldtypes[] = $result->columnType($colnum);
}
$result->reset();
while( $row = $result->fetchArray( SQLITE3_NUM ) ) {
for ($colnum=0; $colnum<count($row); $colnum++) {
$col = &$row[$colnum];
if (isset($fieldtype_encode_binary[$fieldtypes[$colnum]])) $col = $fieldtype_encode_binary[$fieldtypes[$colnum]]( $col );
}
unset($col);
if ($resulttype == SQLITE3_ASSOC) $row = array_combine( $fieldnames, $row );
$rows[] = $row;
}
$result->finalize();
$sqlite->close();
return $rows;
}
備註 1:在任何 'fetchArray' 之前,欄位的類型是 SQLITE3_NULL,在最後擷取的列之後是 'false'。
備註 2:SQLITE3_INTEGER、SQLITE3_FLOAT、SQLITE3_TEXT、SQLITE3_BLOB、SQLITE3_NULL 的實際值分別為 1、2、3、4、5。