0

列に対して 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; 
4

1 に答える 1

0

わかりましたので、答えを見つけたと思います。への呼び出しで2番目のものを使用する前に、最初の STATEMENT $stmt を閉じる必要がありました

mysqli_stmt_close($stmt) 

すぐ後

if( mysqli_stmt_num_rows($stmt) == 0 )

単にやっている

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

新しいステートメントを取得せず、前の変数を上書きしません!

于 2013-07-29T18:49:55.163 に答える