2016-04-25 16 views
3

Ich bin neu in PHP. Ich versuche, mysql dayabase mit MATCH GEGENST anstatt mit LIKE zu suchen. mit diesem Skript,Fehler bei der Verwendung von MATCH() AGAINST() in PHP mysql

<?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>'; 
} 
    ?> 

aber es diesen Fehler geben,

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 

Wo das Problem in diesem Script ist?

Ich möchte die Datenbanktabelle mit Match gegen suchen.

Aber das gleiche Skript funktioniert gut mit

SELECT sura, Aya, Text aus bn_bengali WHERE Text LIKE?

warum nicht match gegen funktioniert? Wo ist das Problem in diesem Skript?

+1

Index Wörter in mysql reserviert –

Antwort

3

index ist Reserved Words in mysql es in Graviszeichen

Ihre Anfrage

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

nach SELECT 'index' ändern,' sura', 'aya',' Text' seiner geben diese Fehler fehlgeschlagen Prepare: (1191) Kann nicht FULLTEXT- Sions die Spalte finden Liste –

+0

Bitte beachten Sie [link] (http://stackoverflow.com/questions/9680472/cant-find-fulltext-index-matching-the-column-list-indexes-is-set) für Ihren Fehler – Saty

+0

Haben Sie das überprüfen Verknüpfung??? – Saty

1

index ist Reserved Words in mysql sein muss es in Graviszeichen

Versuchen Sie, Ihre Abfrage zu ändern, um dies wäre sein muss:

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

Ich würde Ihnen auch empfehlen, den Spaltennamen zu ändern, damit Sie auch in Zukunft kein Problem haben, da nach dieser Änderung Fehler auftreten können.

+0

nach dem Ändern von SELECT 'index',' sura', 'aya',' text' es gibt diesen Fehler Prepare failed: (1191) Kann FULLTEXT Index nicht finden passend zur Spaltenliste –

+0

@HasanBinKarim, bitte versuchen Sie Ihre zu ändern Spaltenname mit 'ALTER' Abfrage – Nehal

+0

Ich änderte den Namensindex in ID, aber der Fehler Vorbereiten fehlgeschlagen: (1191) Kann FULLTEXT Index nicht finden passend zur Spaltenliste ist immer noch –

1

Es ist gute Praxis, 'Backtick' mit jeder Spalte in der Abfrage hinzuzufügen. so dass, wenn Sie sogar mysql reserve Schlüsselwort verwenden, dann wird es kein Problem verursachen. Probieren Sie den folgenden Code aus.

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>'; 
} 
    ?> 
Verwandte Themen