К сожалению, в PHP <= 5.2 функции / классы MySQL (т.е. <code>mysql_*, mysqli_*
и PDO
) основаны на libmysql - библиотеке C, которая обеспечивает поддержку связи с сервером MySQL.
Функции, использующие эту библиотеку, всегда возвращают строки, даже для целочисленных и плавающих столбцов - и с этим ничего не поделаешь: единственное решение - иметь некоторый «слой отображения» (например, ORM) который «знает», на стороне PHP, какой тип должен быть у каждого столбца, и будет выполнять преобразование каждый раз, когда некоторые данные извлекаются из базы данных.
Примечание: способ, которым вы вставляете данные, ничего не меняет в том факте, что вы получите строки при извлечении данных из БД.
С PHP> = 5.3 функции, которые взаимодействуют с сервером MySQL, могут использовать mysqlnd (MySQL Native Driver) вместо libmysql - хотя это должно быть настроено во время компиляции.
И способность общаться с «нативными» типами данных при определенных обстоятельствах является одной из приятных вещей, которые предоставляет mysqlnd; Об этом должна быть пара интересных сведений в этой статье: PHP: новый сетевой трафик, экономия ресурсов процессора и памяти с помощью mysqlnd .
Чтобы сделать вещи короткими:
- В PHP 5.2 вы будете получать только строки из базы данных; и вам придется самостоятельно выполнять преобразование типов
- В PHP 5.3 вы можете получить собственные типы данных - по крайней мере, в некоторых случаях.