example column cast php mysql pdo types mysql-json

php - cast - save json in mysql column



El error de consulta PHP PDO en la tabla tiene el tipo de datos json(MySQL 5.7.8-rc) (3)

Tuve el mismo problema en PHP 5.5: decidí actualizar a PHP 5.6, pero el problema aún existía. Casting a CHAR ayuda, pero no es una buena solución.

Mi configuración de PHP estaba usando libmysqlclient y cuando lo cambié a mysqlnd (controlador nativo de MySQL) resolvió el problema.

Entonces recomiendo hacer lo mismo.

Puede leer acerca de los controladores PHP MySQL aquí: http://php.net/manual/en/mysqlinfo.library.choosing.php

Instalé el controlador mysqlnd en el servidor Ubuntu usando apt-get:

apt-get install php5-mysqlnd

Estoy probando el nuevo tipo de datos json en mysql 5.7. Cuando uso php mysql query nativo, funciona bien, pero cuando uso PDO para consultar datos, muestra este error:

Error: excepción ''PDOException'' con el mensaje ''SQLSTATE [HY000]: error general: 2036'' en /some_folder/pdo.php:12 Stack trace: # 0 /some_folder/pdo.php(12): PDO-> query (''select * from table_has_json_datatype '') # 1 {main}

¿Ustedes saben cómo resolver este problema?

Gracias.

Actualiza con mi código de prueba simple:

<?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; } ?>


Como un pequeño apéndice. Convertir la columna en un carácter similar tiene el efecto de devolver el valor con comillas dobles a su alrededor. Puedes deshacerte de ellos usando trim:

select *, TRIM(BOTH ''"'' FROM CAST(json_col as CHAR)) as json_col from table_with_json_type


Es un error reportado a los desarrolladores de PHP # 70384

El desarrollador [email protected] acaba de publicar:

La solución para este error ha sido confirmada.

Las instantáneas de las fuentes se empaquetan cada tres horas; este cambio estará en la próxima instantánea. Puede tomar la instantánea en http://snaps.php.net/ .

Para ventanas:

http://windows.php.net/snapshots/ Gracias por el informe y por ayudarnos a mejorar PHP.

Reparado en PHP-5.6.19, PHP-7.0 y maestro (PHP-7.1)

Gracias por tu informe

Por lo tanto, el tipo de datos JSON será compatible con PHP 5.6.19+. Para otras versiones, hay una solución disponible anteriormente.

Esta solución alternativa modifica el campo JSON con la función CAST a un CHAR, lo cual está bien desde la perspectiva de PHP: Ej .:

select *, CAST(json_col as CHAR) as json_col from table_with_json_type

Me ha funcionado en todos los casos.

Para la compatibilidad completa debe usar PHP-5.6.19 +