Почему все типы данных возвращаются как строки с sqlite3 fetchAll (PDO: FETCH_ASSOC) с PHP?

я использую

$rows = $statement->fetchAll(PDO::FETCH_ASSOC); 

чтобы получить все строки таблицы.

Схема определена как «id INTEGER PRIMARY KEY, title TEXT, year INTEGER, цена REAL»

Строка из результатов fetchAll

 array(4) { [0]=> string(1) "1" [1]=> string(14) "The Dark Night" [2]=> string(4) "2008" [3]=> string(5) "19.95" } 

Почему все типы данных возвращаются в виде строк? Я хочу, чтобы они были возвращены, как определено в схеме. Я понимаю «беспричинный» характер SQLite, но они определяют ограниченные типы данных как TEXT, INTEGER и REAL. Как я могу получить данные, которые будут возвращены с указанными типами данных? Я не хочу проходить через каждую строку и конвертировать ее с PHP – это кажется слишком медленным.

Полный тестовый код, как следует:

 <? class sqlite_test { function __construct() { $this->dbase_filename = "test.sqlite"; $this->init_dbase(); } function init_dbase() { $this->pdo = new PDO("sqlite:".$this->dbase_filename); } function open_table() { $table = "dvds"; if ( ! ($test_to_see_if_table_exists = $this->pdo->query("SELECT 1 from $table")) ) { $schema = "id INTEGER PRIMARY KEY, title TEXT, year INTEGER, price REAL"; $query = "CREATE TABLE $table ($schema)"; $this->pdo->exec($query); } return $test_to_see_if_table_exists; } function add_test_records() { $query[]='INSERT INTO dvds (id, title, year, price) VALUES (null, "The Dark Night", 2008, 19.95)'; $query[]='INSERT INTO dvds (id, title, year, price) VALUES (null, "The Wizard of Oz", 1939, 9.95)'; $query[]='INSERT INTO dvds (id, title, year, price) VALUES (null, "Jaws", 1977, 6.95)'; $this->pdo->exec( join(';', $query) ); } function dump_test_records() { $query = "SELECT * FROM dvds"; if ($statement = $this->pdo->prepare($query)) { $statement->execute(); $rows = $statement->fetchAll(PDO::FETCH_ASSOC); echo "<pre>"; var_dump($rows); echo "</pre>"; } } function main() { if ( ! $this->open_table() ) { $this->add_test_records(); } $this->dump_test_records(); } } $test = new sqlite_test(); $test->main(); 

    Это не имеет никакого отношения к SQLite; все записи будут возвращены в виде наборов строк независимо от того, что вы используете для запроса базы данных. Это просто характер адаптеров / драйверов базы данных, используемых PHP.

    Если вы хотите, чтобы значения были из ваших желаемых типов, вам нужно вручную нарисовать их.