Je le code suivant:requête SQL LIKE défaut - erreur fatale dans la déclaration préparée
$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("ss", $table, $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = mysql_num_rows($data);
$rows = getRowsByArticleSearch($query, $table, $max);
$last = ceil($rowcount/$page_rows);
}
qui devrait fonctionner correctement. Cependant, je reçois l'erreur suivante:
Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de? Where upper (ARTICLE_NAME) LIKE '%?%' » À la ligne 1
Si je mets
SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '% o %';
La requête fonctionne très bien. $ table est défini ci-dessus et la requête est reçue de GET, et les deux sont des valeurs valides correctes. Pourquoi est-ce échouer?
modifier: changer à:
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
résultats dans l'erreur:
Attention: mysqli_stmt :: bind_param() [mysqli-stmt.bind-PARAM]: Nombre de variables qui ne fonctionne pas correspond au nombre de paramètres dans l'instruction préparée dans C: \ Program Files \ EasyPHP 3.0 \ www \ prog \ get_records.php sur la ligne 38
Commandes désynchronisées; vous ne pouvez pas exécuter cette commande maintenant
où que
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", "%".$query."%");
résultats dans
Erreur fatale: ne peut pas passer le paramètre 2 par référence dans C: \ Program Files \ EasyPHP 3.0 \ www \ prog \ get_records.php sur la ligne 38
et enfin
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ? ";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
donnera seulement:
Commandes désynchronisées; vous ne pouvez pas exécuter cette commande maintenant
Est-il impossible d'utiliser un paramètre pour un état LIKE?
double possible de [exception SQL lorsque vous essayez de faire une déclaration préparée] (http://stackoverflow.com/questions/460920/sql-exception-when-trying-make-an-prepared -statement) – outis