此函数永远不会返回除 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。