2013-07-29 97 views
0

我想在列上執行FULLTEXT搜索,並且如果第一次返回零行,那麼在布爾模式下進一步搜索FULLTEXT。如果我在命令行手動輸入SQL查詢到MySQL,我會得到我期望的結果,但是這段代碼將一個空數組返回給我的JS。 任何想法,我要去哪裏?PHP全文搜索不起作用

$con = mysqli_connect($db_url, $db_user, $db_pwd, $db); 
if(!$con) { 
error_log("Connection failed!"); 
die(); 
} 

$sql = "SELECT problem, note_text, doctor, entry_date FROM notes WHERE mrn=? AND MATCH(note_text) AGAINST(?)"; 

$stmt = mysqli_prepare($con, $sql); 
mysqli_stmt_bind_param($stmt, 'is', $_POST['mrn'], $_POST['search_text']); 
$success = mysqli_stmt_execute($stmt); 

if(mysqli_stmt_num_rows($stmt) == 0) { // Then try fulltext search in boolean mode 

    $sql = "SELECT problem, note_text, doctor, entry_date FROM notes WHERE mrn=? AND MATCH(note_text) AGAINST(? IN BOOLEAN MODE)"; 

    $stmt = mysqli_prepare($con, $sql); 
    mysqli_stmt_bind_param($stmt, 'is', $_POST['mrn'], $_POST['search_text']); 
    $success = mysqli_stmt_execute($stmt); 
} 

    mysqli_bind_result($stmt, $problem, $note_text, $doctor, $date); 
    $notes = array(); 

    for($i = 0; mysqli_stmt_fetch($stmt) == TRUE; ++$i) { 
     $notes[$i] = array('problem' => $problem, 'note' => $note_text, 'doctor' => $doctor, 'date' => $date); 
    } 

    $json = json_encode($notes); 
    echo $json; 
+0

您的所有代碼都只是假設查詢調用成功。永遠不會成功。假設失敗並將成功視爲令人驚喜的事情。開始檢查你的mysqli調用的返回值。 –

+0

謝謝,我會加入一張支票。但假設它成功了(現在全部是本地主機)...... – Amoeba

+0

只有一種方法可以使查詢成功:它只是起作用。但接近無限的失敗方式。只有**這些方式**如果數據庫服務器崩潰或其他方式**。仍然存在sql語法錯誤,這是本網站上常見的常見錯誤。你需要處理所有這些情況。 –

回答

0

好吧,所以我想我找到了答案。我需要關閉的第一條語句$語句之前,我使用的第二個通過調用

mysqli_stmt_close($stmt) 

只是

if(mysqli_stmt_num_rows($stmt) == 0) 

簡單地做

$stmt = mysqli_prepare($con, $sql); 

後不給你拿新語句並覆蓋以前的變量!