LIKE ステートメントのクエリとワイルドカード演算子を使用して、mysqli の準備済みステートメントを使用しようとしています。デバッグ後、コード全体に echo ステートメントを振りかけると、while ステートメントが実行されていないことがわかります。ここで私が間違っていることがわかりますか?
このフォーラムで質問するのはこれが初めてなので、これが適切な質問でない場合は申し訳ありません。コードのプリペアドステートメント セクションを機能させるために 6 時間を費やしましたが、私の質問に対処するスレッドが見つかりません。連想配列へのステートメント? )。私が見つけた最も近い2つは次のとおりです。
準備済みステートメントでのワイルドカードの使用 - MySQLi およびPHP 準備済みステートメントを LIKE と組み合わせます。
これが私のコードの関連する抜粋です:
//set up and execute queries
$titleQuery = "SELECT keyframeurl, videoid, title, creationyear, sound, color,
duration, genre FROM openvideo WHERE title LIKE CONCAT ('%', ?, '%')
ORDER BY $order";
if($stmt = mysqli_prepare($db, $titleQuery)){
//bind parameters
mysqli_stmt_bind_param($stmt, 's', $trimmedTitleSearch);
//execute query
mysqli_stmt_execute($stmt);
//bind results
mysqli_stmt_bind_result($stmt, $keyframeurl, $videoid, $title, $year, $sound,
$color, $duration, $genre);
//store result so num rows can be counted
$result = mysqli_stmt_store_result($stmt);
//fetch results
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
echo "<tr>";
echo "<td><a href=\"".$row['keyframeurl']."\">".$row['videoid']."</a></td>";
echo "<td>" . $row['title'] . "</td>";
echo "<td>" . $row['year'] . "</td>";
echo "<td>" . $row['sound'] . "</td>";
echo "<td>" . $row['color'] . "</td>";
echo "<td>" . $row['duration'] . "</td>";
echo "<td>" . $row['genre'] . "</td>";
echo "</tr>";
}
}
else {
// Error
printf("Prepared Statement Error: %s\n", $db->error);
}
アドバイスをありがとう!