Я пытаюсь новый тип данных 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;
}
?>
Об ошибке сообщили разработчикам 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 +
У меня была та же проблема в 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
Как небольшое дополнение. Приведение столбца к символу, подобному этому, возвращает значение с двойными кавычками вокруг него. Вы можете избавиться от них с помощью отделки:
select *, TRIM(BOTH '"' FROM CAST(json_col as CHAR)) as json_col from table_with_json_type