[英]How to display results from mysqli prepared statement?
處理這一點 PHP(剛剛開始並一直在查看文檔)。 我在另一個頁面上有一個表單,一切都正確傳遞,並且查詢正在返回結果(它旨在搜索並返回用戶搜索的結果)。 行數顯示正確,因此結果正確,但我嘗試過的幾個選項未能顯示結果。 我只想顯示返回行的結果。 另外,如果有關於如何簡化准備語句和綁定的任何建議,我還沒有找到大量帶有 LIKE 和 % 搜索多個列的示例,如下所示。 謝謝
<?php
echo "<div class='result-count'>";
if(isset($_POST['keywords'])){
$keywords = $con->escape_string($_POST['keywords']);
#$keywords = preg_replace("#[^0-9a-z]#i","", $keywords);
$query = $con->prepare(" SELECT firstname, lastname, phone, email
FROM users
WHERE firstname LIKE CONCAT('%',?,'%')
OR lastname LIKE CONCAT('%',?,'%')
OR firstname LIKE CONCAT('%',?,'%')
OR phone LIKE CONCAT('%',?,'%')
OR email LIKE CONCAT('%',?,'%')
");
$query->bind_param("sssss", $keywords, $keywords, $keywords, $keywords, $keywords);
$query->execute();
$query->store_result();
$num_of_rows = $query->num_rows;
#WORKS ABOVE ^
$query->bind_result($id, $first_name, $last_name, $phone, $email, $address);
# echo $keywords ;
if($num_of_rows){
while($r = $query->fetch()){
echo $r->user_id;
}
}
else {
echo $num_of_rows . ' results found.';
}
}
echo "</div>";
?>
你有幾個問題。 第一個是您綁定了 6 個結果,但您的查詢只返回 4 個。第二個是mysqli_stmt::fetch
僅返回一個指示成功/失敗的布爾值,因為所有結果數據都被提取到綁定結果參數中。 對於您的查詢,您需要執行以下操作:
$query->bind_result($first_name, $last_name, $phone, $email);
while ($query->fetch()) {
echo $first_name, $last_name, $phone, $email;
}
筆記:
escape_string
。%
添加到參數的任一側(即$keywords = "%$keywords%";
)並且只使用LIKE ?
而不是查詢中的LIKE CONCAT('%',?,'%')
5 個實例。我同意尼克所說的。 您的主要錯誤是混淆了bind_result()/fet ch()
工作方式。 出於這個原因,讓我建議fetch_all()
。 它將所有結果讀入一個簡單的 PHP 多維數組。 然后您可以像任何其他數組一樣循環它。
<?php
echo "<div class='result-count'>";
if (isset($_POST['keywords'])) {
$keywords = '%' . $_POST['keywords'] . '%';
$query = $con->prepare(" SELECT firstname, lastname, phone, email
FROM users
WHERE firstname LIKE ?
OR lastname LIKE ?
OR firstname LIKE ?
OR phone LIKE ?
OR email LIKE ?
");
$query->bind_param("sssss", $keywords, $keywords, $keywords, $keywords, $keywords);
$query->execute();
$users = $query->get_result()->fetch_all(MYSQLI_ASSOC);
# echo $keywords ;
if ($users) {
foreach ($users as $r) {
echo $r['firstname'];
}
} else {
echo '0 results found.';
}
}
echo "</div>";
其他要點:
escape_string()
num_rows
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.