Я пытаюсь использовать новый тип данных json для mysql 5.7. Когда я использую собственный запрос php mysql, он работает нормально, но когда я использую PDO для запроса данных, он показывает эту ошибку:
Ошибка: исключение «PDOException» с сообщением «SQLSTATE [HY000]: общая ошибка: 2036 'в /some_folder/pdo.php:12 Трассировка стека: # 0 /some_folder/pdo.php(12): PDO-> query (' select * from table_has_json_datatype ') # 1 {main}
Вы, ребята, знаете, как решить эту проблему?
Благодарю.
Обновление с помощью моего простого тестового кода:
<?php try{ $db = new PDO('mysql:host=some.host;dbname=somedb;charset=utf8', 'user', 'pwd'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); }catch(PDOException $e){ echo "Error1: ".$e; } try{ $query = $db->query("select * from table_with_json_type"); }catch(PDOException $e){ echo "Error2: ".$e; } ?>
Это ошибка, сообщенная разработчикам PHP # 70384
Разработчик andrey@php.net только что опубликовал:
Исправлено исправление этой ошибки.
Снимки источников упаковываются каждые три часа; это изменение будет в следующем снимке. Вы можете получить снимок на странице http://snaps.php.net/ .
Для Windows:
http://windows.php.net/snapshots/ Благодарим вас за отчет и за помощь в улучшении PHP.
Исправлено в PHP-5.6.19, PHP-7.0 и master (PHP-7.1)
Спасибо за ваш доклад
Таким образом, тип данных JSON будет поддерживаться на PHP 5.6.19+. Для другой версии существует обходное решение, доступное выше.
Это временное решение изменяет поле JSON с функцией CAST на CHAR, что отлично с точки зрения PHP: например:
select *, CAST(json_col as CHAR) as json_col from table_with_json_type
Он работал со мной во всех случаях.
Для полной совместимости вы должны использовать PHP-5.6.19 +
У меня была такая же проблема в PHP 5.5 – решили обновить до PHP 5.6, но проблема все еще существовала. Отливка от CHAR помогает, но это нехорошее решение.
Моя конфигурация PHP использовала libmysqlclient, и когда я изменил ее на mysqlnd (родной драйвер MySQL), она решила проблему.
Поэтому я рекомендую сделать то же самое.
Вы можете прочитать о драйверах PHP MySQL здесь: http://php.net/manual/en/mysqlinfo.library.choosing.php
Я установил драйвер mysqlnd на сервере Ubuntu, используя apt-get:
apt-get install php5-mysqlnd
В качестве небольшого добавления. Приведение столбца в символ, подобный этому, приводит к возврату значения с двойными кавычками вокруг него. Вы можете избавиться от них, используя обрезку:
select *, TRIM(BOTH '"' FROM CAST(json_col as CHAR)) as json_col from table_with_json_type