当前位置: 首页 > 知识库问答 >
问题:

如何显示mysqli prepared语句的结果?

锺玺
2023-03-14

正在研究这一点PHP(刚刚开始,正在查看文档)。我在另一个页面上有一个表单,所有内容都正确传递,查询返回结果(这意味着搜索并返回用户搜索的结果)。行数显示正确,因此结果正确,但我尝试的几个选项在显示结果时失败。我只想显示返回行的结果。另外,如果对如何简化prepare语句和bind有什么建议的话,我还没有找到大量使用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>";
?>

共有2个答案

罗伟兆
2023-03-14

我同意尼克所说的。您的主要错误是混淆了bind\u result()/fet ch()的工作原理。出于这个原因,我建议fetch\u 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\u string()
柴茂材
2023-03-14

你有几个问题。第一个是绑定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\u string
  2. 在PHP中,将%添加到参数的任一侧(即$keywords=“%$$keywords%”;)并在查询中使用LIKE?而不是5个实例LIKE CONCAT(“%”、?、“%”),效率更高
 类似资料:
  • 从我提供的代码中,我想知道我做错了什么?

  • 问题内容: 该代码可以编译,但是在TOAD中不会显示“ hi wo”输出 我如何显示输出(类似于println在Java中射击到控制台的方式)? 问题答案: 您需要启用DBMS输出。如果在编辑器中工作,请右键单击并从“桌面”弹出菜单中选择“ DBMS输出”。如果禁用了按钮,则该按钮为红色。单击它,它将变为绿色。然后执行您的代码。输出将在那里显示。如果您在编辑器之外工作(例如在模式浏览器中),请从T

  • 问题内容: 如何在SQL中遍历SELECT语句的结果?我的SELECT语句将仅返回1列,但返回n个结果。 我在下面创建了一个虚构的场景,其中包含我想做的事情的伪代码。 设想: 学生正在注册他们的课程。他们提交具有多个课程选择的表格(即一次选择3个不同的课程)。当他们提交注册时,我需要确保他们选择的课程还有剩余的空间(请注意,在向他们展示课程选择UI之前,我将进行类似的检查,但是之后我需要进行验证,

  • 问题内容: 目前,我正在与MySQLi一起玩,试图弄清它们的工作原理。在我目前的项目中,我总是喜欢在编码时回显查询字符串,以确保一切正确,并快速调试我的代码。但是…如何使用准备好的MySQLi语句来做到这一点? 例: 我一直在浏览此列表(http://www.php.net/mysqli),但没有任何运气。 编辑 好吧,如果在MySQLi中不可能,也许我会坚持这样的事情: 显然,这还远未达到完美,

  • 我已经花了很多时间弄清楚为什么我的搜索在我定制的模板中不起作用。到目前为止,我已经知道了如何包含searchform。php文件在我的头,创建搜索。php文件目前是空的(因此,当我搜索某个内容时,我会被重定向到一个空白页面,我想我肯定需要search.php文件中的某些内容才能使其正常工作),我阅读了Wordpress codex的所有内容,但找不到解决方案,我找到的唯一有用信息是这个。 http

  • 我在研究mysqli准备的声明,我有两个问题。 在阅读过程中,我发现预处理语句的执行顺序如下所示: 这是我的第一个问题: 在我阅读时,它还提到以下内容: 如果不将结果绑定到变量,请使用$row=$stmt- 他们使用这两种方法中的任何一种来循环结果集是否有任何优点/缺点?如果没有区别,那么为什么还要麻烦使用$stmt绑定结果呢- 这是我的另一个问题: $stmt- 希望你的回答能让我更好地理解事先