2016-04-25 2 views
3

Я новичок в php. Я пытаюсь искать mysql dayabase, используя MATCH AGAINST вместо использования LIKE. используя этот скрипт,Ошибка При использовании MATCH() AGAINST() в 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>'; 
} 
    ?> 

, но это дает эту ошибку,

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 ГДЕ текст LIKE?

Почему не подходит против работы? Где проблема в этом скрипте?

+1

Индекс зарезервированных слов в MySQL –

ответ

3

index является Reserved Words в MySQL он должен быть в кавычкой

Ваш запрос будет

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

после изменения выбора 'index',' 'sura', aya',' Text' его подачи эта ошибка Готовят не удалось: (1191) Не удается найти полнотекстовый индекс, соответствующий столбец список –

+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 он должен быть в кавычкой

Попробуйте изменить запрос следующим образом:

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

Также я предлагаю вам изменить имя столбца, чтобы в будущем вы не столкнулись с проблемой, так как после этого изменения есть возможность получить ошибки.

+0

после смены SELECT 'index',' sura', 'aya',' text' с его получением этой ошибки Подготовить сбой: (1191) Не удается найти индекс FULLTEXT, соответствующий списку столбцов –

+0

@HasanBinKarim, попробуйте изменить имя столбца с помощью запроса 'ALTER' – Nehal

+0

Я изменил индекс имени на id, но ошибка Не удалось: (1191) Не удалось найти индекс FULLTEXT, соответствующий списку столбцов, все еще существует –

1

Рекомендуется использовать «обратный ход» с каждым столбцом в запросе. так что, если вы используете даже ключевое слово mysql reserve, это не создаст проблем. Попробуйте ввести код ниже.

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