Comment gérer les problèmes de MySQLi ? Par exemple, une erreur se produit dans mysqli_fetch_array() : le paramètre #1 doit être de type mysqli_result.
P粉426906369
2023-07-24 16:47:03
<p>Dans mon environnement local/de développement, la requête MySQLi fonctionne correctement. Cependant, lorsque je le télécharge sur mon environnement d'hébergement Web, j'obtiens l'erreur suivante : </p>
<blockquote>
<p>Erreur fatale : Appel à une fonction membre bind_param() sur un non-objet dans...</p>
</blockquote>
<p>Voici le code : </p>
<pre class="brush:php;toolbar:false;">global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->exécuter();
$stmt->bind_result($uid, $desc);</pre>
<p>Pour vérifier ma requête, j'ai essayé d'exécuter la requête via phpMyAdmin dans le panneau de configuration et le résultat était normal. </p>
En bref
Explication
Parfois, votre code mysqli générera des erreurs, telles que mysqli_fetch_assoc() s'attendant à ce que le paramètre 1 soit mysqli_result mais obtenant en réalité un booléen..., appelant une fonction membre de bind_param()... ou des erreurs similaires. Il n'y a même pas d'erreur mais la requête ne fonctionne toujours pas. Cela signifie que votre requête n'a pas pu s'exécuter.
Chaque fois qu'une requête échoue, MySQL affichera un message d'erreur expliquant pourquoi. Dans les anciennes versions de PHP, ces messages d'erreur n'étaient pas transmis à PHP et vous obteniez simplement le message d'erreur obscur mentionné ci-dessus. Par conséquent, il est très important de configurer PHP et mysqli pour vous signaler les erreurs MySQL. Une fois que vous recevez le message d’erreur, vous pouvez corriger l’erreur.
Comment obtenir des messages d'erreur dans MySQL
Tout d'abord, dans tous les environnements, ajoutez toujours la ligne de code suivante avant la connexion mysqli :
Après cela, toutes les erreurs MySQL seront converties en exceptions PHP. Les exceptions non interceptées provoqueront des erreurs fatales PHP. Ainsi, si une erreur MySQL se produit, vous recevrez une erreur PHP régulière. Cela vous fera immédiatement prendre conscience de la cause de l’erreur. Et la trace de la pile vous mènera à l'emplacement exact où l'erreur s'est produite.
Comment obtenir des informations sur les erreurs de PHP
Sur le serveur de développement, assurez-vous que le message d'erreur s'affiche à l'écran, et sur le serveur de production, vérifiez le journal des erreurs. Voir mon article sur le rapport d'erreurs PHP pour plus de détails.
Veuillez noter que lorsque vous effectuez des appels AJAX, ouvrez les outils de développement (F12) sur le serveur de développement et passez à l'onglet réseau. Faites ensuite une demande dont vous souhaitez voir les résultats et elle apparaîtra dans l'onglet Réseau. Cliquez dessus et passez à l'onglet Réponse. Vous y verrez le résultat exact. Sur le serveur de production, vérifiez le journal des erreurs.
Comment gérer le message d'erreur que vous recevez
Tout d’abord, vous devez trouver la requête problématique. Le message d'erreur contient le nom du fichier et le numéro de ligne où l'erreur s'est produite. Pour du code simple, cela suffit, mais si votre code utilise des fonctions ou des classes, vous devrez peut-être tracer la pile pour trouver la requête problématique.
Après avoir reçu le message d'erreur, vous devez le lire et le comprendre. Cela peut paraître trop évident, mais les apprenants négligent souvent le fait qu’un message d’erreur est plus qu’un simple signe d’avertissement : il contient en réalité une explication détaillée du problème. Il vous suffit de lire le message d'erreur et de résoudre le problème.
Si vous ne comprenez pas le message d'erreur, essayez de le rechercher sur Google. Lorsque vous parcourez les résultats, choisissez des réponses qui expliquent l'erreur plutôt que de donner directement une solution. La solution peut ne pas fonctionner dans votre situation spécifique, mais l’explication vous aidera à comprendre le problème et vous permettra de le résoudre vous-même.
Vous devez également croire à la désinformation. Si le message d'erreur indique que le nombre de jetons ne correspond pas au nombre de variables de liaison, c'est tout. Il en va de même pour les tables ou colonnes manquantes. Lorsque vous choisissez, que ce soit de votre propre faute ou de la désinformation, tenez-vous-en toujours à la première. Encore une fois, cela peut paraître arrogant, mais les centaines de questions sur ce site prouvent à quel point ce conseil est utile.
Débogage de base
Si votre requête ne semble pas fonctionner, il peut y avoir quatre raisons :