Syntaxe PHP ? HereDoc et pgsql

Petit nouveau ! | 5 Messages

17 janv. 2010, 21:36

Bonjour à tous

Je sais qu'en pgsql une requête est de la forme :
INSERT INTO Utilisateurs (NomUtil, Password) VALUES ('x'),('y')

En ajoutant un HereDoc pour simplifier ma syntaxe php (pour l'écrire sans utiliser un . à la moins variable), j'obtiens ceci :

$req_ajout = <<< EOT
INSERT INTO Utilisateurs (NomUtil, Password) VALUES ('$temp1'),('$temp2')
EOT;

Et ce code ne fonctionne pourtant pas, j'espère que vous pourrez m'aider à le corriger.
p.s : Est il aussi possible d'utiliser un $_SESSION['temp'] à la place de mon $temp1 par exemple?

Merci d'avance de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 janv. 2010, 22:00

Comme à chaque fois que l'on essaye de debugger du SQL, il faut essayer de ne pas mélanger PHP et SQL.
Donc, dans un 1er temps, essaye ta requête sans les variables PHP, et si elle marche, remet les variables PHP.
Après, si ça ne marche toujours pas, affiche la requête SQL générée (avec un echo) et essaye de l'exécuter depuis un client SQL.

Et, dans tout les cas, le message d'erreur contient 90% de la réponse. Il faut donc le lire, le comprendre, ou alors rechercher sur le net à quoi correspond l'erreur.

Pour ton cas, je suis pret à parier que les variables PHP ne sont pas exécutée dans le cas de la syntaxe Heredoc.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 12 Messages

17 janv. 2010, 23:22

Essaye en mettant les noms de variables entre crochets {}

Personnellement, j'utilise de temps en temps la cette syntaxe et je n'ai jamais rencontré de problème (même avec des tableaux)

ViPHP
ViPHP | 5462 Messages

19 janv. 2010, 21:24

attention avec le heredoc, y'a pas d'espace apres les <<< et verifie bien que il n'y est pas d'espace ni de tab a la fin
//pas bien
$test = <<< EOT
         coucou
      EOT
//bien
$test = <<<EOT
         coucou
EOT

Petit nouveau ! | 5 Messages

20 janv. 2010, 22:20

Je vous remercie à tous, le débugging est prévu pour ce week end, alors "I'll be back!" vous faire un compte rendu.

Vos remarques vont me permettre d'utiliser les bonnes méthodes de débugging, voire directement les bonnes syntaxes :)

Petit nouveau ! | 5 Messages

29 janv. 2010, 02:13

Eh ben voila je suis en plein dedans, je bloque sur un truc vraiment fou. Ce code fonctionne sous sql et pas moyen de marcher dans php :/
echo $_SESSION['mat_select'];

$req_liste_ssmat = <<<EOT
    SELECT libellesousmatiere FROM SousMatieres AS s, Matieres AS m
	WHERE s.nummatiere = m.nummatiere
	AND m.libellematiere = ('${_SESSION['mat_select']}')
EOT;

$resultat = pg_query($dbconn, $req_liste_ssmat) or die ($chaine = "Erreur");
Donc voila je fais un echo de $_SESSION['mat_select'], j'obtiens "Réseaux" par exemple. J'éxécute la commande avec Réseaux directement sur sql, ca fonctionne, et dans php j'obtiens une erreur. J'ai essayé de remplacer ma variable de session par une simple, ca ne change rien, et cette syntaxe je l'ai déja utilisé sur d'autres commandes qui fonctionnent... Merci de votre aide.

Petit nouveau ! | 5 Messages

29 janv. 2010, 13:21

Aye je n'arrive toujours pas à débugguer ce script, j'ai essayé en utilisant la concaténation (sans HereDoc) mais ca ne passe toujours pas.
J'ai passé à un problême d'accent (en admettant que qd je teste directement sur la BD, il passe "Réseaux" en utf9, et que c'est pour ca que ca fonctionne) car ma bd est en UTF9 mais en utilisant Informatique (pas d'accent, ouioui) au lieu de Réseaux ca ne fonctionne pas non plus... Merci de vos lumières si ca vous parle ;) J'espère!! :)

Petit nouveau ! | 5 Messages

29 janv. 2010, 14:02

OH PUTIN!

débuggué.

Je suis un boulet ^^ Je ne vous apprend pas qu'il y a une différence entre un WHERE X AND Y et un WHERE (X AND Y)
hein ;)