Requête OK dans phpmyadmin mais pas dans mysqli->prepare()
EDIT : j'ai trouvé tout seul (en fait il suffisait que je vienne poster pour que j'ai une autre idée de piste de recherche).
La cause du problème : il me manquait un "$stmt->close()", quelque part plus haut dans le script, provoquant un "Commands out of sync; you can't run this command now".
La façon dont j'ai trouvé : j'ai remplacé le prepare/bind_param par un query(sprintf()). Il se trouve qu'avec le query, mysqli->error n'est pas vide, ce qui m'a permi de voir immédiatement quel était le problème.
Reste que je ne sais toujours pas pourquoi mysqli->prepare() ne renseigne jamais mysqli->error :'(
_________________________________
Bonjour,
J'ai un petit problème avec une grosse requête que j'essaie de lancer depuis php avec mysqli.
-> si je fais un $stmt = $myqli->prepare('marequete'); , j'ai une erreur "Call to a member function bind_param() on a non-object" lorsque j'essaie d'appeler $stmt->bind_param(...). Habituellement j'ai cette erreur si la requête a une erreur de syntaxe.
-> mais si je copie-colle la requête dans phpmyadmin et que je remplace les arguments à la main, elle fonctionne parfaitement.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
$select = ' SELECT Un, Tas, De, Champs
FROM tablecentrale
LEFT JOIN t2 ON nullable = t2.id
INNER JOIN t3 ON champId = t3.id
LEFT JOIN t4 ON ...
INNER JOIN t5 ON ...
INNER JOIN t6 ON ...
INNER JOIN t7 ON ...
INNER JOIN t8 ON ...
WHERE 1=1
AND colonnedeT5 = ?
AND tablecentrale.deleteLogique IS NULL
AND NOW() < DATE_ADD(IFNULL(EndDate, DATE_ADD(BeginDate, INTERVAL 2 HOUR)), INTERVAL ? DAY)
AND (nullable IS NULL
OR EXISTS(SELECT * FROM t9 WHERE xxx = nullable AND userID = ? ) ) ';
switch($mode) {
case 1:
$request = $select.'AND monchamp = ?';
$stmt = $mysqli->prepare($request);
$stmt->bind_param('iiii', $bidule, 0,$userid, $monchamp);
break;
// TODO faire les autres cas
default :
// faire des choses
}
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($un, $tas, $de, $champs);
$stmt->fetch(); |
Deux bizarreries supplémentaires :
- selon des modifs que j'ai tenté de faire dans la requête, l'erreur php "Fatal error: Call to a member function bind_param() on a non-object" est parfois surmontée d'un "SCREAM: Error suppression ignored for", chose qui a l'air aléatoire.
- quoi que je fasse, $mysqli->error est TOUJOURS vide. C'est un problème qui est systématique chez moi.
Merci,
Cordialement,
aze555666