Call to a member function execute() on a non-object - PHP - Programmation
Marsh Posté le 15-01-2009 à 16:28:44
Bonjour.
Apparemment, ce qui ne lui plait pas c'est ça :
Code :
|
A priori, je dirais que $statement n'est pas défini comme un objet - en prod'.
Essaye de faire un
Code :
|
avant le execute, ça devrait te donner des informations.
A voir :
Créer une page php avec juste
Code :
|
Et regarde s'il n'y a pas des différences entre l'environnement de dév' et celui de prod'...
Marsh Posté le 15-01-2009 à 16:47:25
Le "var_dump($statement);" retourne ceci :
Code :
|
Pour phpinfo(), je regarde tout de suite.
Marsh Posté le 15-01-2009 à 16:52:52
Le var_dump te donne la même chose dans les deux environnements ?
Marsh Posté le 15-01-2009 à 17:02:22
Oui c'est identiquement la même chose. Du côté de phpinfo aussi mise à part que le prod est configuré pour être sécurisé.
Marsh Posté le 15-01-2009 à 17:26:23
par sécurisé, faut comprendre "safe_mode" à On? Parce que je sais que ce genre de mode pose pas mal de pb à de nombreux scripts php...
Marsh Posté le 15-01-2009 à 17:50:32
question bête : la connexion à la bd est ok? En gros que dans le ficheir de conf, t'as pas laissé le nom de la bd de test? Parce qu'à aucun moment dans ton script tu ne testes ce que contient $statement
(la ligne $db->prepare($sql) pourrait très bien renvoyer une erreur, mais n'étant pas familier avec PDO...)
Marsh Posté le 15-01-2009 à 18:16:26
Le nom de la base de donnée est la même, login et mot de passe sont adaptés.
Marsh Posté le 15-01-2009 à 18:30:45
Gavrinis a écrit : Le "var_dump($statement);" retourne ceci :
|
à la ligne 61 ?
Marsh Posté le 15-01-2009 à 18:34:59
Bon c'est résolu, il y avait bien une erreur (merci Rufo ).
Maintenant j'ai droit à une autre ... "Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /var/www/includes/functions.php on line 72 Warning"
Code :
|
La ligne 72 correspond ici à la ligne 3, je lui mets une condition "si le paramètre est vide va au else", bien sûr que le paramètre est vide car c'est comme au dessus nous sommes sur la homepage, mais seulement il parcourt quand même le if et après vient se plaindre
Marsh Posté le 15-01-2009 à 19:15:14
J'ai parlé trop vite, il me sort toujours l'erreur précédente mais cette fois en ligne 60 (ligne 14 de mon premier post) en plus de la nouvelle erreur
Marsh Posté le 16-01-2009 à 09:33:03
Gavrinis a écrit :
|
Si le script passe dans ta condition IF, c'est qu'elle est validée...
Tu as testé voir s'il y passe effectivement (echo par exemple) ?
Essaye de fractionner ton test. C'est peut-être moins optimisé, mais ce sera plus simple à maintenir :
Code :
|
Ceci-dit, je ne pense pas que ce soit cette ligne qui te génére un Warning: PDOStatement...
Sinon, vu que tu utilises PDO - ou une variante :
Code :
|
Apparemment, d'après la doc PHP, tu devrais préciser dans ton prepare un array...
Marsh Posté le 16-01-2009 à 09:40:18
Gavrinis a écrit : Bon c'est résolu, il y avait bien une erreur (merci Rufo ). |
Ca me paraît plus simple à résoudre. il te dit que le paramètrre passé n'est pas défini. Soit $_GET['lang'] contient rien (auquel cas voir pourquoi) soit il contient une valeur qui n'est pas un nombre. Attention, en général, ce qui est passé dans du GET ou POST est vu comme un type string. PDO fait sans doute la distinction entre la valeur 1 et "1". Si $_GET['lang'] n'est aps vide, essayes de faire (integer)$_GET['lang'] pour forcer le type.
Marsh Posté le 17-01-2009 à 10:44:30
macgawel a écrit :
Tu as testé voir s'il y passe effectivement (echo par exemple) ?
Sinon, vu que tu utilises PDO - ou une variante :
|
Le problème s'est qu'un echo ne changera rien car le $_GET['lang'] est sensé ne rien contenir lors de l'arrivé sur la page, le echo n'affichera donc rien.
J'ai mis ton test mais ça n'a rien changé .
Ta solution pour le Warning me donne ceci "Erreur de statement avec la requ�te SELECT id, nom, repertoire FROM themes WHERE id = :id_theme"
Pour le prepare Ok mais je ne vois pas quel array mettre
Marsh Posté le 17-01-2009 à 10:47:52
rufo a écrit : |
Il ne contient rien car quand le visiteur arrive sur la homepage, il n'y a pas encore de paramètre dans l'url, c'est pour cela qu'il y a une alternative avec les sessions.
Sa valeur contenue n'est effectivement pas un nombre étant donné que c'est soit "fr" soit "en".
Marsh Posté le 28-01-2009 à 10:45:21
Citation : Exemple #1 Prépare une requête SQL avec des paramètres nommés |
Si tu lis la doc de prepare et execute :
Le problème, c'est que tu demande d'exécuter une requête en lui passant des paramètres, mais que tu la prepare sans paramètres.
Du coup, forcément ça coince !
Essaye d'adapter un des exemples de la doc à ton cas, et vois ce que ça donne...
Marsh Posté le 29-01-2009 à 13:28:05
C'est encore pire si j'ajoute cela à mon prepare car la page ne s'affiche plus du tout, une page blanche c'est tout.
Marsh Posté le 30-01-2009 à 18:46:01
Oui
Code :
|
Marsh Posté le 15-01-2009 à 16:22:04
Bonjour,
J'ai un petit problème avec un bout de code pompé . Bizarrement, il passe sous WAMP mais pas sous Apache/PHP, en bref en dev Ok, en prod pas OK. Je cherche depuis un moment ce qui bloque mais je ne vois pas très bien.
Erreur : "Fatal error: Call to a member function execute() on a non-object in /var/www/common.php on line 62", la ligne 62 correspond à la 16 ici, le tableau GET ne contient rien car c'est la homepage (domaine.net), les constantes sont bien initialisées :
Merci d'éclairer ma lanterne.