erreur dans une requet avec implode

keo
Petit nouveau ! | 1 Messages

01 nov. 2008, 22:16

Bonsoir cela fait 2 mois que j'essaye d'apprendre tous seul le php
j'ai un souci avec ce script:

Code : Tout sélectionner

<?php session_start(); $sql="SELECT * FROM prestation"."WHERE idprest IN(".implode(",", $_SESSION['monpanier']).")"; $resultat=mysql_query($sql) or die (mysql_error()); while($service=mysql_fetch_array($resultat)) { print $service['acte']; } ?>
ai je oublité de mettre des accent en trop ou les oublié
voici l'erreur affichier:

Code : Tout sélectionner

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN(1,2,1,3,1,1,1,1,1,3)' at line 2
merci d'avance de vos aident.

Eléphanteau du PHP | 36 Messages

01 nov. 2008, 23:21

Salut

Je suis débutant en php mais déjà je pense pas que ce sois juste ça!
$sql="SELECT * FROM prestation"."WHERE idprest 
Aprés prestation le ( ".") je vois pas ce que ça fais là ?

ensuite la fonction implode je connais pas , mais essai déja en enlevant le "." avant le WHERE

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 nov. 2008, 13:56

Première étape pour débugger une requête SQL : l'afficher !

Ben oui, parce que si tu sais pas ce que tu envois à MySQL, tu vas avoir du mal à savoir ce qui ne va pas dedans ;)

Pour répondre à mrarobaz, le "." permet de concatener deux chaines. Il n'y a pas forcément intérêt à les séparer ici, mais dès fois ça peut être plus lisible de découper ses requêtes (et surtout ca permet de mettre des conditions sur certains éléments :))

Quoi qu'il en soit, le problème vient effectivement de là, puisque si l'on concatène les deux chaines on se retrouve avec un "SELECT * FROM prestationWHERE idprest ... " et forcément, MySQL risque d'avoir du mal à trouver la table "prestationWHERE" ;)

Pour le implode, cette fonction permet de mettre tous les éléments d'un tableau dans une chaine, en les séparant par le caractère spécifié. Pas de problème ici, par contre on peut envisager de supprimer les doublons du tableau avant d'y faire appel :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...