Position actuelle: Accueil> Derniers articles> Quels sont les conseils pratiques pour déboguer les erreurs de syntaxe de requête MySQL à l'aide de mysqli_stmt :: $ error_list?

Quels sont les conseils pratiques pour déboguer les erreurs de syntaxe de requête MySQL à l'aide de mysqli_stmt :: $ error_list?

gitbox 2025-09-17
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
En développement réel,Nous rencontrons souvent MySQL L&#39;exécution de la requête a échoué,Surtout lorsque vous utilisez des déclarations de prétraitement(Prepared Statements)heure。Bien que mysqli Fourni error et errno Attributs pour obtenir des informations d&#39;erreur,Mais ceux-ci ne renvoient généralement qu&#39;une erreur。Si vous voulez devenir plus détaillé、Message d&#39;erreur structuré,mysqli_stmt::$error_list C&#39;est un outil très utile。

------------------------------------------------------------
*/</span>

</span><span><span class="hljs-comment"># utiliser mysqli_stmt::$error_list conduire MySQL Quels sont les conseils pratiques pour le débogage des erreurs de syntaxe?</span></span><span>

在utiliser PHP de mysqli 扩展conduire数据库操作heure,`mysqli_stmt::</span><span><span class="hljs-variable">$error_list</span></span><span>` 属性能够为开发者提供一个包含所有错误信息de数组。C&#39;est compliqué à déboguer SQL 查询heure尤其有帮助,Parce qu&#39;il contient non seulement la première erreur,还会列出执行过程中出现de所有错误细节。

</span><span><span class="hljs-comment">### 1. `mysqli_stmt::$error_list` de返回结构</span></span><span>

`</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error_list` Un tableau sera retourné,其中de每个元素都是一个关联数组,Comprend les valeurs clés suivantes:
- **errno**:Code d&#39;erreur
- **sqlstate**:SQLSTATE 标准化Code d&#39;erreur
- **error**:错误de详细描述

Exemple de valeur de retour:
```php
[
    [
        </span><span><span class="hljs-string">"errno"</span></span><span> =&gt; </span><span><span class="hljs-number">1064</span></span><span>,
        </span><span><span class="hljs-string">"sqlstate"</span></span><span> =&gt; </span><span><span class="hljs-string">"42000"</span></span><span>,
        </span><span><span class="hljs-string">"error"</span></span><span> =&gt; </span><span><span class="hljs-string">"You have an error in your SQL syntax; ..."</span></span><span>
    ]
]
</span></span>

2. Scénarios d'utilisation typiques

Pendant le processus de débogage, en particulier lorsque les instructions SQL sont longues ou impliquent une liaison de paramètres multiples, une seule erreur $ stmt-> n'est souvent pas suffisante pour localiser le problème. Pour le moment, nous pouvons traverser $ stmt-> error_list pour afficher tous les messages d'erreur à la fois.

Exemple de code:

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"pass"</span></span><span>, </span><span><span class="hljs-string">"test"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Prepare failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error);
}

</span><span><span class="hljs-variable">$id</span></span><span> = </span><span><span class="hljs-string">"abc"</span></span><span>; </span><span><span class="hljs-comment">// Type d&#39;erreur transmis intentionnellement</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error_list) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error_list </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$err</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error Code: <span class="hljs-subst">{$err['errno']}</span></span></span><span>\n";
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"SQLSTATE: <span class="hljs-subst">{$err['sqlstate']}</span></span></span><span>\n";
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Message: <span class="hljs-subst">{$err['error']}</span></span></span><span>\n\n";
    }
}

</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>

3. Suggestions de débogage

  1. Activer dans l'environnement de développement <br> Utilisez la sortie détaillée des informations d'erreur uniquement en mode développement ou débogage pour éviter de divulguer la structure de la base de données ou des informations sensibles dans les environnements de production

  2. Combiné avec l'exploitation forestière <br> Écrivez $ stmt-> Error_list Sortie dans le fichier journal pour une analyse ultérieure et un trace de problème

  3. Coopérer avec le tableau de comparaison SQLState <br> Localisez rapidement les types de problèmes en fonction du code SQLState (erreurs de synchronisation, autorisations insuffisantes, interruptions de connexion, etc.)

4. Résumé

Par rapport à l' erreur traditionnelle $ stmt-> , mysqli_stmt :: $ error_list peut fournir des détails d'erreur plus riches, en particulier lors du débogage des requêtes complexes et des instructions de prétraitement, ce qui peut considérablement améliorer l'efficacité du positionnement des problèmes. L'utiliser correctement peut nous aider à résoudre les erreurs de syntaxe SQL et les problèmes d'exécution plus rapidement et plus précisément.

 <span></span>