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


kewai
Réponse acceptée

Normalement tu devrais faire ceci

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

en parlant du charset bien sûr ;)

JC Little
Auteur
Réponse acceptée

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.

iriven
Réponse acceptée

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

$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);

http://php.net/manual/fr/book.json.php

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.

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

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

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

define('DB_ENCODING', 'utf8');

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