2016-04-25 6 views
3

私はPHPで新しいです。私は、LIKEを使用するのではなく、MATCH AGAINSTを使用してmysqlデータベースを検索しようとしています。このスクリプトを使用して、エラーphp mysqlでMATCH()AGAINST()を使用中に

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

が、それはこのエラーを与えている、

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 

どこ問題は、このスクリプトではありますか?

データベーステーブルを照合して検索したいと思います。

しかし、同じスクリプトがbn_bengaliテキストなどから

SELECTふくらはぎ、彩、テキストで正常に動作していますか?

なぜマッチしないのですか? このスクリプトのどこに問題がありますか?

+1

IndexはSELECT 'index'、' sura'を、変更後のmysql –

答えて

3

indexは、MySQLで、それはあなたのクエリが

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

内の単語を予約されている 'aya'、'そのこのエラーが失敗した準備を与えtext'リスト –

+0

エラーについては[link](http://stackoverflow.com/questions/9680472/cant-find-fulltext-index-matching-the-column-list-indexes-is-set)を参照してください – Saty

+0

リンク??? – Saty

1

indexだろうバッククォート

でなければなりませんReserved WordsあるMySQLでは、それはこれにクエリを変更してみてくださいバッククォート

でなければなりませんReserved Wordsです。

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

また、この変更を行った後にエラーが発生する可能性があるため、今後も問題に直面しないように列名を変更することをお勧めします。

+0

に感謝します。準備ができませんでした:(1191)列リストに一致するFULLTEXTインデックスが見つかりません –

+0

@HasanBinKarim、列名は 'ALTER'クエリを使用して – Nehal

+0

名前インデックスをidに変更しましたが、準備ができませんでした:(1191)列リストに一致するFULLTEXTインデックスがまだ見つかりません –

1

クエリのすべての列に「バックティック」を追加することをお勧めします。そのため、mysql reserveキーワードを使用しても問題は発生しません。以下のコードを試してください。 (1191)の列に一致するFULLTEXTインデックスを見つけることができません:

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>'; 
} 
    ?> 
関連する問題