Maison >base de données >tutoriel mysql >MySQL PreparedStatement : Pourquoi `executeQuery()` échoue-t-il avec une erreur de syntaxe ?

MySQL PreparedStatement : Pourquoi `executeQuery()` échoue-t-il avec une erreur de syntaxe ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-11 15:26:41177parcourir

MySQL PreparedStatement: Why is `executeQuery()` Failing with a Syntax Error?

Instruction préparée MySQL : résolution des executeQuery() erreurs de syntaxe

Un problème courant lors de l'utilisation de PreparedStatement de Java avec MySQL implique des erreurs SQLException indiquant des problèmes de syntaxe SQL à proximité de l'espace réservé (?). Cela résulte souvent d'une mauvaise exécution de l'instruction.

Le problème :

Le code Java employant PreparedStatement peut générer une exception similaire à :

<code>... you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?'</code>

L'approche incorrecte :

L'erreur se produit généralement lors de la tentative d'exécution du PreparedStatement en utilisant executeQuery() avec un argument de chaîne (par exemple, la requête SQL elle-même) :

<code class="language-java">statement.executeQuery(searchPerson); // Incorrect</code>

Ceci traite searchPerson comme une chaîne SQL littérale, en ignorant les espaces réservés définis dans PreparedStatement.

La bonne solution :

La clé est d'exécuter le PreparedStatement sans aucun paramètre transmis à executeQuery() :

<code class="language-java">statement.executeQuery(); // Correct</code>

Les paramètres sont déjà liés au PreparedStatement en utilisant setString(), setInt(), etc., avant l'appel executeQuery(). Fournir à nouveau la chaîne de requête comme argument remplace cette liaison et entraîne une erreur de syntaxe. executeQuery() exécute simplement l'instruction avec les paramètres pré-liés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn