Ошибка запроса PHP PDO для таблицы имеет тип данных json (MySQL 5.7.8-rc)

Я пытаюсь новый тип данных 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 * из 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;
}
?>

6

Решение

Об ошибке сообщили разработчикам PHP # 70384

Разработчик [email protected] только что опубликовал:

Исправление для этой ошибки было совершено.

Снимки источников упаковываются каждые три часа; это изменение
будет в следующем снимке. Вы можете получить снимок на
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 +

11

Другие решения

У меня была та же проблема в 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 установить php5-mysqlnd

1

Как небольшое дополнение. Приведение столбца к символу, подобному этому, возвращает значение с двойными кавычками вокруг него. Вы можете избавиться от них с помощью отделки:

select *, TRIM(BOTH '"' FROM CAST(json_col as CHAR)) as json_col from table_with_json_type
1
По вопросам рекламы [email protected]