0

PHP で簡単な検索スクリプトを作成しました。実行すると空白の画面が表示され、PHP エラー ログに状態が表示されます

バインド変数の数が準備済みステートメントのフィールド数と一致しません

$searchTitle と 1 つのバインド パラメータ (文字列) をバインドしているフィールドが 1 つあるため、なぜこれが表示されているのかわかりません。マークアップが完全に間違っている可能性があります。

アドバイスをいただければ幸いです。ありがとう。

<?php
if (isset($_POST['btn-search-article'])) {
    $searchTitle = $_POST['search-title'];
    include_once("mysqli_connect.php");
    $table = "articles";  
    $sql = "SELECT title, 
            MATCH(title,category,artbody) 
            AGAINST ('?') 
            AS score
            FROM $table
            ORDER BY score DESC";                
    $stmt = mysqli_stmt_init($dbh);
    if (!(mysqli_stmt_prepare($stmt, $sql))) {
        echo("Write to DB failed ");
    }
    else { //statement prepared ok
        mysqli_stmt_bind_param($stmt, 's', $searchTitle);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $s1);
        while (mysqli_stmt_fetch($stmt)) {
            echo($s1 . "<br>");
        }
        mysqli_stmt_close($stmt);
    }
} else {
    echo("Error: Search could not be completed");
}
?>

注: PHP エラー ログには、エラーが次の行にあることが示されています。

mysqli_stmt_bind_result($stmt, $s1);

修正済み: SQL ステートメントの順序がエラーの原因だったようです。する必要があります

$sql = "SELECT title
        FROM $table
        WHERE MATCH (title, category, artbody)
        AGAINST (?)";
4

0 に答える 0