2013-07-29 65 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); 

后不给你拿新语句并覆盖以前的变量!