我正在嘗試使用mysqli爲LIKE語句查詢和通配符運算符準備語句。經過調試後,在整個代碼中都會出現echo語句,我可以看到while語句沒有執行。你能看到我在這裏做錯了嗎?mysqli_fetch_array(),預處理語句和LIKE語句
這是我第一次問這個論壇,所以我很抱歉,如果這不是一個好問題,我花了6個小時試圖讓我的代碼的準備語句部分工作,我找不到解決我的問題的任何線索(例如How can I put the results of a MySQLi prepared statement into an associative array?)。我發現的兩個最接近的是:
Using wildcards in prepared statement - MySQLi 和Combine PHP prepared statments with 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);
}
感謝您的諮詢!
我之前使用過MySQLi,但把它變成數組是一個很大的挑戰。如果你剛開始這個程序,我會建議學習PDO,因爲它使得數組和檢索信息比MySQLi容易得多。 MySQLi_STMT只是....不完整,感覺就像它被遺棄了一半。 – Rujikin 2013-04-06 03:15:03
「我可以看到我的while語句沒有執行」 - 任何錯誤消息? – sectus 2013-04-06 03:27:23
是的,這不是一個好問題。只是*看*代碼是不是要走的路。代碼必須是*運行*代替。你應該分開你的目標,不要一次全部完成。用事先準備好的語句對事情進行排序,然後進行LIKE或其他特定查詢。是的 - 如果你不想浪費你的時間,[**移動到PDO **](http://stackoverflow.com/tags/pdo/info),直到不會太晚 – 2013-04-06 03:39:54