Faire une correspondance entre 1 variable et 1 table

Eléphant du PHP | 372 Messages

07 avr. 2014, 18:50

Merci c'est pas évident surtout pour un premier mais on s'adapte.
Donc voilà la req écuter ds PHPMYADMIN
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser '); 
il me trouve une erreur:



Erreur

Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.

ERROR: Ponctuation invalide @ 13
STR: ->
SQL: $req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
');


Requête SQL: Documentation

$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser ');

MySQL a répondu: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
' at line 1

Pour rapel:
$bdd = new PDO('mysql:host=domaine;dbname=mabase','user','password',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }

ViPHP
xTG
ViPHP | 7331 Messages

07 avr. 2014, 20:40

phpmyadmin n'exécute pas du PHP mais du SQL ! ;)
SELECT publicite.titre FROM publicite, villes_france WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
et remplaces :codePostIpUser par une valeur lors du test.

Eléphant du PHP | 372 Messages

08 avr. 2014, 14:35

Salut xTG,
bon en éxécutant la requête, il remplacant :codePostIpUserr par 38850 ( car j'ai mis un exemple en bdd avec ce code ci ).
Il ressort le résultat suivant

Affichage des lignes 0 - 3 ( 4 total, Traitement en 1.3292 sec)
SELECT publicite.titre
FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode
AND publicite.postcode =38850
LIMIT 0 , 30


Il trouve bien le titre: dédé

Donc une erreur ailleurs mais où ? j'ai vérifier la syntaxe apparament pas de pbm de ce coté.....je désespère pourtant je pense pas être loin d'aboutir à ce projet

ViPHP
xTG
ViPHP | 7331 Messages

08 avr. 2014, 17:24

Bon donc la requête SQL est bonne c'est déjà ça.
Maintenant il ne reste plus qu'à rajouter des points dans le code PHP pour avoir plus d'infos.
echo "exécution de la requête. code_postal = $codePostalIpUser";
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
                            WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
                          ');
echo $req->execute(array('codePostIpUser'=>$codePostalIpUser)); // un echo pour vérifier que cela ne retourne pas false
var_dump($req->fetch()); // on regarde ce que cela retourne

Eléphant du PHP | 372 Messages

08 avr. 2014, 17:35

$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
                            WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
                          ');
						  
						 
						  
    echo $req->execute(array('codePostIpUser'=>$codePostalIpUser)); // un echo pour vérifier que cela ne retourne pas false
	var_dump($req->fetch()); // on regarde ce que cela retourne
    $reponse = array();
Bon c'est que même bizar puisque ça me retourne ceçi:

LePin code postal :38850

1array(2) { ["titre"]=> string(7) "le dede" [0]=> string(7) "le dede" } Aucun titre ne correspond.

ViPHP
xTG
ViPHP | 7331 Messages

08 avr. 2014, 19:00

Bon maintenant va falloir mettre la main à la pâte pour régler le reste.
Je te dirai bien de jeter tout ce qui suit dans la fonction...
Car tu fais à peu près n'importe quoi...

Tout ce que tu as à faire c'est récupérer le retour de fetch().
Si c'est false tu retournes ton texte d'erreur, sinon tu retournes l'index titre.