3 votes

Erreur lors de l'utilisation de MATCH() AGAINST() en php mysql

Je suis nouveau en php. J'essaie d'effectuer une recherche dans la base de données mysql day en utilisant MATCH AGAINST plutôt qu'en utilisant LIKE. en utilisant ce script,

    <?php

 if (isset($_GET['q'])){

        error_reporting(-1);

      $query = $_GET['q'];

        $dbh  = new mysqli($host, $user, $password,  $database);

        if ($dbh->connect_error) {
            echo 'Unable to connect to database '. $dbh->connect_error;
        } else {

            if ($stmt = $dbh->prepare("SELECT index, sura, aya, text FROM bn_bengali WHERE MATCH(sura,text) AGAINST(?) "))

               {
                $stmt->bind_param("s", $query);

                $stmt->execute();

                $stmt->bind_result($index, $sura, $aya, $text);

                $stmt->store_result();
              printf("Number of rows: %d.\n", $stmt->num_rows);

                while ($stmt->fetch()) {
                    echo $sura.'-'.$aya;
                    echo $text;
                    echo '<hr />';
                }
            } else {
                   echo "Prepare failed: (" . $dbh->errno . ") " . $dbh->error;
            }
        }

} // end isset get q
else
{
     echo '<form action="" ><input type="text" name="q"><button>Search</button></form>';
}
    ?>

mais il donne cette erreur,

Prepare failed: (1064) 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 'index, sura, aya, text FROM bn_bengali WHERE MATCH(sura,text) AGAINST(?)' at line 1

Où est le problème dans ce script ?

Je veux faire une recherche dans la table de la base de données avec une correspondance.

Mais le même script fonctionne bien avec

SELECT sura, aya, text FROM bn_bengali WHERE text LIKE ?

pourquoi ne pas faire correspondre ce qui fonctionne ? Où est le problème dans ce script ?

3voto

Saty Points 19825

index est Mots réservés dans mysql il doit être en backtick

Votre question serait

SELECT `index`, `sura`, `aya`, `text`...

1voto

Nehal Points 1340

index est Mots réservés dans mysql il doit être en backtick

Essayez de modifier votre requête comme suit :

SELECT `index`, `sura`, `aya`, `text` FROM...

Je vous suggère également de changer le nom de la colonne afin de ne pas rencontrer de problème à l'avenir, car après avoir effectué ce changement, il est possible d'obtenir des erreurs.

1voto

sandeep soni Points 245

C'est une bonne pratique d'ajouter "backtick" avec chaque colonne dans la requête. Ainsi, si vous utilisez même le mot-clé mysql reserve, cela ne créera aucun problème. Essayez le code ci-dessous.

  if ($dbh->connect_error) {
            echo 'Unable to connect to database '. $dbh->connect_error;
        } else {

            if ($stmt = $dbh->prepare("SELECT `index`, `sura`, `aya`, `text` FROM bn_bengali WHERE MATCH(sura,text) AGAINST(?) "))

               {
                $stmt->bind_param("s", $query);

                $stmt->execute();

                $stmt->bind_result($index, $sura, $aya, $text);

                $stmt->store_result();
              printf("Number of rows: %d.\n", $stmt->num_rows);

                while ($stmt->fetch()) {
                    echo $sura.'-'.$aya;
                    echo $text;
                    echo '<hr />';
                }
            } else {
                   echo "Prepare failed: (" . $dbh->errno . ") " . $dbh->error;
            }
        }

} // end isset get q
else
{
     echo '<form action="" ><input type="text" name="q"><button>Search</button></form>';
}
    ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X