8768 sujets

Développement web côté serveur, CMS

Bonjour à tous
Si j'écris

$sql = <<<SQL
	SELECT a.addressID, a.street, a.zip, a.town, a.country,
		l.title as title, m.firstName, m.lastName
	FROM Addresses as a
		LEFT JOIN Locations as l
			ON l.locID = a.addressID
		LEFT JOIN Members as m
			ON m.mbID = a.addressID
	WHERE a.addressID = :locationID
	LIMIT 1
	;
SQL;
	$stmt = $GLOBALS['DATABASE'] -> pdo -> prepare($sql);
	$stmt -> bindValue(':locationID', $id);

$stmt -> execute();
répond "false";
Si j'écris

$sql = <<<SQL
	SELECT a.addressID, a.street, a.zip, a.town, a.country,
		l.title as title, m.firstName, m.lastName
	FROM Addresses as a
		LEFT JOIN Locations as l
			ON l.locID = a.addressID
		LEFT JOIN Members as m
			ON m.mbID = a.addressID
	WHERE a.addressID = '$id'
	LIMIT 1
	;
SQL;
	$stmt = $GLOBALS['DATABASE'] -> pdo -> prepare($sql);
	// $stmt -> bindValue(':locationID', $id);

le résultat est correct.
J'en déduis que le bug est dans $stmt -> bindValue(':locationID', $id);
ça doit crever les yeux, mais je ne vois pas ce qui cloche.
Une idée?
Modérateur
Parce qu'il manque à la méthode bindParam : PDO::PARAM_INT


$sth->bindParam(':calories', $calories, PDO::PARAM_INT);


ps :
- +1 pour la présentation de ton code sql (indentation)
- php , langage typage faible et là, il demande un typage fort. Paye ton incohérence !
Modifié par niuxe (24 Jun 2020 - 16:13)
Merci de ta réponse.
j'ai essayé bindParam, ça ne marchait pas, j'ai réécrit ce bout de code de zéro et maintenant ça fonctionne.... sans doute une faute de frappe.
Pour l'indentation, je le fais systématiquement pour tous les langages depuis plus de 50 ans... Smiley smile
Modifié par PapyJP (24 Jun 2020 - 16:54)