【发布时间】:2013-03-28 14:46:21
【问题描述】:
我正在尝试将 mysqli 准备好的语句与 LIKE 语句查询和通配符运算符一起使用。在调试完代码中的 echo 语句后,我可以看到我的 while 语句没有执行。你能看出我在这里做错了什么吗?
这是我第一次在这个论坛上提问,如果这不是一个好问题,我深表歉意;我花了 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 只是.... 不完整感觉就像是中途放弃了。
-
“我可以看到我的 while 语句没有执行”——任何错误信息?
-
是的,这不是一个好问题。只是观看代码不是要走的路。代码必须 run 代替。你应该分开你的目标,而不是一次做所有的事情。首先使用准备好的语句对事物进行排序,然后进行 LIKE 或其他任何特定查询。是的 - 如果你不想浪费你的时间,move to PDO 直到为时不晚
-
您正在绑定结果集,因此您可以将
while循环设置为使用mysqli_stmt_fetch($stmt),然后使用您为结果绑定的变量。不过,正如其他人所说,现在出去使用 PDO ^^
标签: php mysqli prepared-statement