【问题标题】:PHP fulltext search not workingPHP全文搜索不起作用
【发布时间】:2013-07-29 18:19:29
【问题描述】:

我正在尝试对列执行 FULLTEXT 搜索,如果第一个返回零行,则在布尔模式下进一步 FULLTEXT 搜索。如果我在命令行中手动将 SQL 查询输入 MySQL,我会得到我期望的结果,但是这段代码将一个空数组返回给我的 JS。 有什么想法吗?

$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; 

【问题讨论】:

  • 所有代码都只是假设查询调用成功。永远不要假设成功。假设失败,将成功视为惊喜。开始检查 mysqli 调用的返回值。
  • 谢谢您,我会添加支票。但假设它成功(现在都是 localhost)......
  • 查询成功只有一种方法:它可以正常工作。但是失败的方式几乎是无限的。如果数据库服务器崩溃或其他任何方式,则只有 ONE。仍然存在 sql 语法错误,这在此站点上非常常见。您需要处理所有这些情况。
  • SQL,正如我在帖子中所说,绝对有效。我已经在 MySQL 本身中运行它,所以问题不在于 SQL 查询

标签: php mysql sql mysqli full-text-search


【解决方案1】:

好的,我想我已经找到了答案。在我使用第二个 STATEMENT $stmt 之前,我需要关闭第一个 STATEMENT $stmt 并调用

mysqli_stmt_close($stmt) 

紧接着

if( mysqli_stmt_num_rows($stmt) == 0 )

只是做

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

不会给你一个新的语句并覆盖以前的变量!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2018-08-29
    • 2018-07-18
    • 1970-01-01
    • 2017-03-31
    • 2018-07-26
    相关资源
    最近更新 更多