PDO / JSON

Par JC Little, il y a 11 ans


Bonjour à tous et toutes

Je voudrais avoir les données en json, j'ai regardé sur le net on ça donnerai ça

$pdo = $this->getPDO(); // getPDO cf le tuto
$req = $pdo->query($statement);
$datas = $req->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($datas);
Mais cela ne fonctionne pas. Est ce quelq'un a déjà essayé ? si oui une réponse de code correct pour me dire ce qui ne va pas.

9 réponses

JC Little, il y a 11 ans

J'ai déjà utilisé json_encode avec un array que je construits mais la c'est avec des données PDO que je demande.
Si c'est pour avoir l'erreur retourner c'est "Malformed UTF-8 characters, possibly incorrectly encoded";
Mais cela ne m'avance pas plus, car même en essayant des options de json_encode cela ne fonctionne pas.

kewai, il y a 11 ans

Normalement tu devrais faire ceci

new PDO("mysql:host=localhost;dbname=DB;charset=UTF8")

en parlant du charset bien sûr ;)

JC Little, il y a 11 ans

c'est bon j'ai trouvé. j'avais oublié de préciser que je suis novice en PHP.
Je suis plus c#.

Donc en fait ca vient du PDO
j'ai ajouté : pdo->exec("SET CHARACTER SET utf8");

Et cela fonctionne.

Merci, le fait d'avoir en parler à quelqu'un cela m'a permis de trouver des pistes.

JC Little, il y a 11 ans

Merci kewai,
Je faisais la même répnse tu as répondu.

iriven, il y a 11 ans

bonjour
je crois mysql peut etre à l'origine de ta mésaventure. quel est ta version de php? et comment te connecte tu à la bdd? à tu pris la peine de preciser le charset lors de ta connexion à la bdd?
voici petit code qui prend en charge les differentes versions de php

define('DB_HOST', 'localhost'); define('DB_NAME', 'test'); define('DB_USER', 'test'); define('DB_PASSWORD', 'test'); define('DB_ENCODING', 'utf8'); $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ); $cmd = 'SET NAMES ' . DB_ENCODING; if( version_compare(PHP_VERSION, '5.3.6', '>') ) { if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ) $options[PDO::MYSQL_ATTR_INIT_COMMAND] = $cmd ; else $dsn .= ';charset=' . DB_ENCODING; } $conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options); if( version_compare(PHP_VERSION, '5.3.6', '<') ) $conn->exec($cmd );

je pense que le code ci-dessus devrait regler ton probleme d'encodage

JC Little, il y a 10 ans

Merci iriven, ta réponse pourra aussi aider, je la mets aussi comme correct même si je ne l'ai pas essayé.

Huggy, il y a 10 ans

@iriven mysql ne comprend qu' utf8 mais pas utf-8

define('DB_ENCODING', 'utf8');
iriven, il y a 10 ans

t'as raison @huggin, juste une erreur lors de la saisie. je rectifie de suite