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
P粉426906369 2023-07-24 16:47:03
0
1
486
<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>
P粉426906369
P粉426906369

répondre à tous(1)
P粉252116587

En bref

  1. Utilisez toujours mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) dans votre code de connexion mysqli ; et vérifiez toujours les erreurs PHP.
  2. Remplacez toujours chaque variable PHP de votre requête SQL par un point d'interrogation et utilisez des instructions préparées pour exécuter la requête. Cela permet d'éviter diverses erreurs de syntaxe.

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 :

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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 le message d'erreur indique qu'un tableau n'existe pas, vous devez vérifier l'orthographe, les fautes de frappe et les majuscules. Vous devez également vous assurer que votre script PHP est connecté à la bonne base de données.
  • Si le message d'erreur affiche une erreur de syntaxe SQL, vous devez alors vérifier votre instruction SQL. Le problème doit se situer avant la partie de la requête référencée dans le message d'erreur.

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 :

  1. Une erreur s'est produite lors de l'exécution. Déjà expliqué ci-dessus.
  2. En raison d'une erreur de logique du programme, le SQL ne s'est pas exécuté du tout. Ajoutez une sortie de débogage temporaire pour garantir que le code atteint le point où la requête est exécutée.
  3. Le SQL a été exécuté avec succès, mais les résultats ont été affichés dans la mauvaise base de données. Veuillez vérifier à nouveau.
  4. Les données saisies ne correspondent pas à la base de données. Voici quelques suggestions pour le vérifier
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal