Страницы

Поиск по вопросам

понедельник, 30 марта 2020 г.

из Mysql все данные приходят в string, как получить нужный тип?

#php #mysql


Сервер

Debian 4.9.65-3+deb9u1 (2017-12-23) x86_64
Mysql 5.7
PHP 7.2


Таблица в базе

CREATE TABLE `test` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `user` INT(11) NULL DEFAULT NULL,
    `project` INT(11) NULL DEFAULT NULL,
    `text` TEXT NULL COLLATE 'utf8_general_ci',
    PRIMARY KEY (`id`)
)
    COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2;


Скрипт PHP

query("SELECT * FROM test WHERE id = 1")->fetch_object();
var_dump($product_name); 
$mysqli->close();


Ответ сервера

object(stdClass)#3 (4) { ["id"]=> string(1) "1" ["user"]=> string(1) "1" ["project"]=>
string(1) "2" ["text"]=> string(10) "Текст" }

через PDO пробывал, так же все в string

т.е всегда получаю string, может какой то модуль поставить надо ? Все ставил из стандартных
репозиториев и настройки по умолчанию
Хостинг Timeweb
    


Ответы

Ответ 1



Не всегда string приходит, обманываете! если будет NULL - то вернётся именно нормальный php-шный null. Остальное всё можно и ручками привести. Можно получать нужные типы. Легко (вру, тяжко и муторно): /** * Костыле-функция для получения PDO типа по native_type * @param string $native_type * @return int */ function getPDOType($native_type) { switch ($native_type) { case 'LONG': return PDO::PARAM_INT; // ... case 'VAR_STRING': default: return PDO::PARAM_STR; } } $pdo = db::connect(); $stmt = $pdo->prepare('SELECT `id`, `name` FROM `users` WHERE `id` = 600;'); $stmt->execute(); $col_cnt = $stmt->columnCount(); $row = []; for ($i = 0; $i < $col_cnt; $i++) { $meta = $stmt->getColumnMeta($i); $stmt->bindColumn( $i + 1, $row[$meta['name']], getPDOType($meta['native_type']) ); } $stmt->fetch(PDO::FETCH_BOUND); var_dump($row); //array(2) { // ["id"] => &int(600) // ["tema"] => &string(9) "Чебурашка" //} Посмотрите также пример в документации. Описание большей части параметров PDO::FETCH_* есть тут. Но я бы не стал использовать такой способ. С другой стороны, если написать ему какую-нибудь функцию-обёртку, которая будет "всё делать за меня" - возможно и пригодилось бы для чего-нибудь.

Комментариев нет:

Отправить комментарий