Rechercher : dans
Par :

Procédure stockée MySQL/PHP

Dernière réponse le 4 aoû 2009 à 16:30:35 flodotsoft, le 1 jui 2008 à 15:50:58 
 Signaler ce message aux modérateurs

Bonjour,

Je viens de faire une procédure stockée sous MySQL qui fonctionne très bien dans mon query browser mais quand je l'exécute à partir de PHP, il me renvoi un tableau d'enregistrement avec caractères quelques peu bizarre ...

<?
$dbh = new PDO('mysql:host=localhost;dbname='.$database, $username, $password);
$maproc = "CALL ps_chercher(ma, liste, de, param)";
$appelSP = $dbh->prepare($maproc);
$appelSP->execute();
while($row = $appelSP->fetchAll(PDO::FETCH_ASSOC)) print_r($row);
?>

La procédure s'exécute correctement et affiche bien le tableau mais avec des choses comme celles-ci : �
les données sont décalées par rapport aux clés du tableau, je peux par exemple avoir dans la clé 1 le début d'un ID et dans la clé 2 la fin du même ID ...

Je pense que cela pourrait venir d'un problème d'encodage des caractères du tableau ou du tableau lui même, mais impossible de trouver quoi que ce soit pour définir le type d'encodage directement dans la proc stock ou dans le PHP.

Si quelqu'un à une piste ou carrément pourquoi pas une solution, je suis preneur ;)

Merci d'avance

Configuration: Windows XP
Firefox 3.0

Meilleures réponses pour « Procédure stockée MySQL/PHP » dans :
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

[o.o]REplay, le 1 jui 2008 à 15:54:52

Bonjour,

essaies:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Au debut de ta page.

:)
~• Coin Coin •~
replay.homeunix.com

Répondre à [o.o]REplay

2

flodotsoft, le 1 jui 2008 à 15:59:14

Merci pour ta réponse.

Mais ca n'a rien a voir avec l'affichage en lui même, c'est en amont que les données ne sont pas bien encodées.
Soit dans la proc stock, soit dans la récupération en PHP.
Au niveau de la page il affiche bien ce qu'on lui donne, enfin presque, y'a un peu trop d'erreurs ...

Répondre à flodotsoft

3

[o.o]REplay, le 1 jui 2008 à 16:06:19

Essaies dans ce cas de faire un utf8_encode($tachaine de caractère) avant de l'afficher.

Sinon le mieux serai de faire des echo de tes chaines de caractères au fur et a mesure de leur manipulation, pour voir où ça ne va plus :)

++

~• Coin Coin •~
replay.homeunix.com

Répondre à [o.o]REplay

4

flodotsoft, le 1 jui 2008 à 16:22:48

En fait je vais reprendre:

Coté affichage tout se passe bien, il m'affiche bien le tableau dans le désordre avec des données incompréhensibles. Mais ce tableau lui est passé tel quel, donc on ne peut rien faire sur l'affichage.

C'est au niveau du traitement (PHP ou MySQL avec proc stock) que le problème intervient.
Il faudrait que je puisse définir le type d'encodage directement dans ma proc stock ou bien dans l'appel en PHP.
Et ca je ne sais pas comment faire.

Répondre à flodotsoft

5

flodotsoft, le 2 jui 2008 à 10:30:22

Up !
pliz ^^

Répondre à flodotsoft

6

[o.o]REplay, le 2 jui 2008 à 10:48:06

"[...] le mieux serai de faire des echo de tes chaines de caractères au fur et a mesure de leur manipulation, pour voir où ça ne va plus".

avant leur manipulation == avant leur stockage dans les tables..

As-tu essayé la fonction utf8_encode() comme je t'ai conseillé? essaie d'encoder directement les mots de tes tables avant de les afficher et dis moic e que ca donne.
~• Coin Coin •~
replay.homeunix.com

Répondre à [o.o]REplay

7

flodotsoft, le 2 jui 2008 à 11:37:31

C'est justement ca le problème.

<?
$dbh = new PDO('mysql:host=localhost;dbname='.$database, $username, $password);
$maproc = "CALL ps_chercher(ma, liste, de, param)";
$appelSP = $dbh->prepare($maproc);
$appelSP->execute();
while($row = $appelSP->fetchAll(PDO::FETCH_ASSOC)) print_r($row);
?>

La proc stock me ramène les bons résultats bien codés, mais ds le traitement PHP, lors de la récupération c'est la qu'il merde. Et impossible de faire des echos avant le while .... ou alors je vois pas du tout ...

pour l'utf8_encode pareil, impossible de l'utiliser sauf dans le while et meme en affichant un élément du tableau ca ne change rien.

Je commence à desepérer ...

Répondre à flodotsoft

8

flodotsoft, le 3 jui 2008 à 10:39:06

Je commence à me demander si on peut bien récupérer un resultset en php avec une proc stock ...

Répondre à flodotsoft

9

[o.o]REplay, le 3 jui 2008 à 10:51:45

Yo,

Aucune idée, je ne sais pas ce qu'est une proc stock, mais a priori si tu affiche bien des résultats avec des données incompréhensibles, c'est que c'est possible. Est-ce que tous les caractères affichés sont comme ça, ou ça ne concerne que les accents?

++
~• Coin Coin •~
replay.homeunix.com

Répondre à [o.o]REplay

10

flodotsoft, le 3 jui 2008 à 11:00:26

Non c'est aléatoire
certain accents passent bien, d'autres ne passent pas, mais c'est surtout qu'il mélange les colonne en piochant un peu partout.
enfin bon merci qd meme, je vais voir pour faire autrement ;)

Répondre à flodotsoft

11

denouvel, le 29 avr 2009 à 12:54:48

Salut,
J'ai visiblement le même problème, tu as trouvé une solution ?

a+

Répondre à denouvel

12

login08, le 29 avr 2009 à 14:01:00

Dsl si je répond à côté car j'ai pas le temps de lire totalement le sujet. Mais si j'ai bien compris pour afficher une chaine de caractère en PHP sans être embêté par les caraactère spéciaux, il faut utiliser la fonction htmlentities

ex:

$chaine = "plein de é partout et de ç et de à";

echo htmlentities($chaine);

Répondre à login08

13

flodotsoft, le 29 avr 2009 à 14:30:20

Salut,

Pour le htmlentities() il faut aussi que toutes les données de la base soient codées en HTML afin que la comparaison puisse être faite et certaine fois il bloquait sur le "&" donc je n'ai pas pu retenir cette solution.

Je me suis aperçu que MySQL zappait les accents, tu peux essayer de passer chaque paramètre dans cette fonction, qui effectue aussi un addslashes() :

<?
function stripAccents($str){
$str = htmlentities($str, ENT_NOQUOTES, "utf-8");
$str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
$str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); // pour les ligatures e.g. 'œ'
$str = preg_replace('#\&[^;]+\;#', '', $str); // supprime les autres caractères
return addslashes($str);
}

$dbh = new PDO('mysql:host=localhost;dbname='.$database, $username, $password);
$maproc = "CALL ps_chercher(stripAccents($mes), stripAccents($paramètres))";
$appelSP = $dbh->prepare($maproc);
$appelSP->execute();
while($row = $appelSP->fetchAll(PDO::FETCH_ASSOC)) print_r($row);
?>

Répondre à flodotsoft

14

 Amarazak, le 4 aoû 2009 à 16:30:35

Essaye "SELECT * FROM taprocedure(et,tes,paramtres)"

Répondre à Amarazak
Collection CommentÇaMarche.net