Я создаю экземпляр Doctrince, как это
$dbalConfig = new \Doctrine\DBAL\Configuration();
$dbal = \Doctrine\DBAL\DriverManager::getConnection($dbalConn, $dbalConfig);
DbalConfig — это просто настройки соединения mysql + установка charset в utf-8
Когда я сейчас выполню запрос:
$sql = "SELECT price FROM products";
$stmt = $dbal->prepare($sql);
$stmt->execute();
$products = $stmt->fetchAll();
и сбросить результаты
var_dump($products);
Я получаю все значения, как это
[1]=>
array(1) {
["price"]=>
float(17)
Тем не менее, в базе данных значение сохраняется как число с плавающей запятой, как это 17.90
Что мне нужно, чтобы получить данные в правильном формате? Я не могу изменить тип столбца с плавающего на какой-либо другой в базе данных, потому что он не принадлежит мне. Можно ли как-то получить правильные значения?
Я исправил эту проблему. Проблема была в том, что я немецкий пользователь. Хе-хе, это не совсем проблема, но это как-то связано с этим.
Сайт, который я использую, имеет LC_NUMERIC
установлен в de_DE.UTF-8
, При изменении его на en_US.UTF-8
это работает без проблем.
setlocale(LC_NUMERIC , 'en_US.UTF-8');
Похоже, локализация была просто «неправильной».
Но! Разве нет способа конвертировать американский формат в немецкий? Потому что я не думаю, что это был бы правильный способ просто изменить LC_NUMERIC
из-за данных, которые я получаю, верно? Это звучит как быстрое и грязное решение
Других решений пока нет …