PHP 8.6.0 Beta 1 is available for testing

Класс SQLite3Result

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

Введение

Класс, предоставляющий доступ к результирующему набору модуля SQLite 3.

Обзор класса

class SQLite3Result {
/* Методы */
private function __construct ()
public function columnName (int $column): string |false
public function columnType (int $column): int |false
public function fetchArray (int $mode = SQLITE3_BOTH ): array |false
public function finalize (): true
public function numColumns (): int
public function reset (): bool
}

Содержание

  • SQLite3Result::columnName — >Возвращает имя n-ого столбца
  • SQLite3Result::columnType — Возвращает тип n-ного столбца
  • SQLite3Result::__construct — Конструктор класса SQLite3Result
  • SQLite3Result::fetchArray — Выбирает одну строку из результирующего набора и помещает её в ассоциативный или нумерованный массив, или в оба сразу
  • SQLite3Result::finalize — Закрывает результирующий набор
  • SQLite3Result::numColumns — Возвращает количество столбцов в результирующем наборе
  • SQLite3Result::reset — Сбрасывает указатель результирующего набора на первую строку

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 5 notes

up
12
jonscully at gmail dot com
16 years ago
Since SQLite3Result::numRows is unavailable, use:
<?php
if ($res->numColumns() && $res->columnType(0) != SQLITE3_NULL) {
 // have rows
} else {
 // zero rows
}
?>

Because when there are zero rows:
* SQLite3Result::fetchArray will return '1'
* SQLite3Result::numColumns will return '1'
* Column type for column '0' will be SQLITE3_NULL
up
5
sameers dot public at gmail dot com
12 years ago
According to http://www.php.net/manual/en/sqlite3result.columntype.php, and also per my experience, columnType() doesn't return anything other than SQLITE3_NULL. Consequently, the test suggested in the comment that tries to identify whether a column is NULL is incorrect.
The right thing to do appears to be to test if ($result->fetchArray())[0] == null.
up
3
jan at bootfinder dot co dot uk
11 years ago
I use the following code to get num_rows:
<?php
...
$nrows = 0;
$result->reset();
while ($result->fetchArray())
 $nrows++;
$result->reset();
return $nrows;
...
?>
up
2
atesin () 6m4i1 ! com
5 years ago
in response to jan at bootfinder dot co dot uk (comment #115891) about getting num_rows...
how about (not tested)... ?
<?php // do cleans before and after if needed
for ( $nrows = 0; isarray($result->fetchArray()); ++$nrows );
return $nrows;
?>
up
0
alan71-at-free-fr
15 years ago
Here's a snippet that might help you to write a fetchObject function that is also missing:
<?php
function fetchObject($sqlite3result, $objectType = NULL) {
 $array = $sqlite3result->fetchArray();
 if(is_null($objectType)) {
 $object = new stdClass();
 } else {
 // does not call this class' constructor
 $object = unserialize(sprintf('O:%d:"%s":0:{}', strlen($objectType), $objectType));
 }
 
 $reflector = new ReflectionObject($object);
 for($i = 0; $i < $sqlite3result->numColumns(); $i++) {
 $name = $sqlite3result->columnName($i);
 $value = $array[$name];
 
 try {
 $attribute = $reflector->getProperty($name);
 
 $attribute->setAccessible(TRUE);
 $attribute->setValue($object, $value);
 } catch (ReflectionException $e) {
 $object->$name = $value;
 }
 }
 
 return $object;
}
?>

Heavily inspired of Bergmann's Object Freezer :
https://github.com/sebastianbergmann/php-object-freezer/blob/master/Object/Freezer.php 
+Добавить

AltStyle によって変換されたページ (->オリジナル) /