簡體   English   中英

如何顯示mysqli准備語句的結果?

[英]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;
}

筆記:

  1. 由於您使用的是參數化查詢,因此您無需在輸入中使用escape_string
  2. 在 PHP 中一次%添加到參數的任一側(即$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
  • 你在 WHERE 子句中有兩次名字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM