tout ptit problème php

tout ptit problème php - PHP - Programmation

Marsh Posté le 12-09-2011 à 23:02:59    

Salut,
je fais une requête dans une base mysql:

Code :
  1. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  2. $bdd = new PDO('mysql:host=localhost;dbname=ttt', 'lll', 'eee', $pdo_options);
  3. $reponse = $bdd->query('SELECT * FROM a where adresse = \''.$adresse.'\'');
  4. while ($donnees = $reponse->fetch())
  5. {
  6. $p1 = $donnees['y'];
  7. echo $p1;
  8. }


 
j'ai 100 lignes différentes dans ma table a (toute les adresses sont uniques)
je m'attend donc à ce qu'il m'affiche 1X la ligne correspondant au resultat de ma requete mais au lieu de ça il me l'affiche 100X
 
pkoi  [:at war with emo]  
 


---------------
LaBrute
Reply

Marsh Posté le 12-09-2011 à 23:02:59   

Reply

Marsh Posté le 13-09-2011 à 22:32:28    

up  :jap:


---------------
LaBrute
Reply

Marsh Posté le 14-09-2011 à 09:12:13    

Tu peux afficher la valeur de ton select ?
 
$bdd = new PDO('mysql:host=localhost;dbname=ttt', 'lll', 'eee', $pdo_options);
$q='SELECT * FROM a where adresse = \''.$adresse.'\'';
echo $q;
$reponse = $bdd->query($q);
 
Voir la tronche de ta requete.

Reply

Marsh Posté le 14-09-2011 à 18:31:05    

ça donne ça:
 
SELECT * FROM o,u where adresse = \".$adresse.\"Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 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 '\".$adresse.\"' at line 1


---------------
LaBrute
Reply

Marsh Posté le 14-09-2011 à 18:36:42    

j'ai fais ça:
 
$q = 'SELECT * FROM o,u where adresse = "'.$adresse.'"';
 
et donc ça m'affiche:
 
SELECT * FROM o,u where land = "b.h@g.com"
 
Les mots de passe ont été envoyés sur votre boite mail
b.h@g.com
 
Les mots de passe ont été envoyés sur votre boite mail
b.h@g.com
 
(100X) 100 étant le nombre de ligne dans la table u. et ça m'envoie 100X le mail à la mème adresse


---------------
LaBrute
Reply

Marsh Posté le 15-09-2011 à 00:19:43    

Spa possible ton truc.  :sweat:  
 
Fais-nous un
 

Code :
  1. <?php
  2.  
  3. $sqlCommand = 'SELECT * FROM aaa A JOIN bbb B ON A.id = B.fkA where adresse = ?';
  4. $params = array($adresse);
  5.  
  6. echo 'Execute: '.strtr($sqlCommand, array('?'=>'\''.$adresse.'\'')).'<br/>';
  7.  
  8. $statement = $this->dbh->prepare($sqlCommand);
  9. $statement->execute($params);
  10. $results = $statement->fetchAll();
  11. $statement->closeCursor();
  12.  
  13. print_r($results);
  14.  
  15. if ($results) {
  16.  $i = 0;
  17.  foreach($results as $result) {
  18.    echo (++$i).'<br/>';
  19.  }
  20. }
  21.  
  22. ?>


 
Et avant tout ça, exécute un 'SET NAMES utf8', on sait jamais.
 
A mon avis ton problème vient juste de la jointure qui est réalisée sans discriminant, et tu te retrouves logiquement avec le produit cartésien de tes tables. Si t'es crado tu fais un distinct, si t'es bogoss tu mets une condition de jointure (voir les INNER JOIN, ou JOIN, en MySQL) en liant la clé primaire de la table A avec la clé étrangère (the A foreign key) fkA de la table B, en partant du principe que A est le maître et B l'esclave.


Message édité par CyberDenix le 15-09-2011 à 00:27:18
Reply

Marsh Posté le 15-09-2011 à 22:16:41    

arf le blaireau j'avais pas mis ce qui permet de faire le lien entre les tables aaa et bbb (-> select * from (...) AND aaa.id = bbb.id )
 
merci à vous


---------------
LaBrute
Reply

Marsh Posté le 16-09-2011 à 10:49:16    

MALHEUREUX, ne fait pas des jointures comme ça.... INNER JOIN est ton ami.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed