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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager