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 +