2016-04-25 102 views
3

我是新來的php。我正在嘗試使用MATCH AGAINST而不是使用LIKE來搜索mysql dayabase。使用該腳本,在php中使用MATCH()AGAINST()時發生錯誤mysql 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>'; 
} 
    ?> 

,但它給這個錯誤,

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 

哪裏是在這個腳本的問題?

我想用匹配搜索數據庫表。

但相同的腳本工作的罰款與

SELECT蘇拉,綾,本文從bn_bengali WHERE文本是怎樣的?

爲什麼不匹配正在工作? 這個腳本中的問題在哪裏?

+1

指數變化SELECT'index','sura',之後保留在MySQL –

回答

3

indexReserved Words在MySQL就必須在反引號

您所查詢的是

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

字'aya','text'它給這個錯誤準備失敗:(1191)找不到FULLTEXT折射率匹配列列表 –

+0

請參考[鏈接](http://stackoverflow.com/questions/9680472/cant-find-fulltext-index-matching-the-column-list-indexes-is-set)您的錯誤 – Saty

+0

你有沒有檢查鏈接??? – Saty

1

indexReserved Words在MySQL就必須在反引號

試着改變你的查詢到這一點:

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

另外我會建議你改變列名,以便你在將來不會遇到問題,因爲在做這個改變之後有可能出現錯誤。

+0

更改SELECT'index','sura','aya','text'它給出此錯誤後準備失敗:(1191)找不到FULLTEXT索引匹配列表 –

+0

@HananBinKarim,請嘗試更改您的列名稱使用'ALTER'查詢 – Nehal

+0

我將名稱索引更改爲ID,但錯誤準備失敗:(1191)找不到與列列表匹配的FULLTEXT索引仍然存在 –

1

在查詢中爲每列添加「反向」是一種好的做法。所以,如果你使用甚至MySQL保留關鍵字,那麼它不會產生任何問題。嘗試下面的代碼。

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