【问题标题】:How to properly fetch object using PDO and php如何使用 PDO 和 php 正确获取对象
【发布时间】:2015-06-02 11:32:05
【问题描述】:

我在我的网站中实现了一个搜索框,在我决定防止 sql 注入之前,它运行良好。我决定使用 PDO,因为很多人认为它比使用 mysql_string_escape 更好。当我尝试从我的数据库中获取数据时,它什么也不返回,但我知道那里有记录。

我的代码

db.php

    $mysqli = new mysqli("localhost","root", "", "1000_AD");

result.php

         <?php

       if (isset($_GET['search'])){

      $search_query = $_GET['user_query'];

      $get_foo = $mysqli->prepare("SELECT * FROM `food` WHERE `food_keywords` 
      LIKE ?");

       $search_query = "%".$search_query."%";

       $get_foo->bind_param('s',$search_query);


    $get_foo->execute();

    $obj = $get_foo->fetch();

    if($obj==0){

     echo "<h4>No results where found!</h4>";

      }

      //fetch results set as object and output HTML
      while($list = $get_foo->fetch())
     {
       $foo_id = $list['food_id'];

       echo '<div class="food">'; 
        echo '<form method="post" action="basket.php" id = "add-basket-form" 
         >';
        echo '<h4>'.$list['food_title'].'</h4>';
  echo '<div class="pic"><img src="admin/food_images/'.$list['food_image'].'" 
      width= "180" height= "160"></div>';
     echo "<p><b>£".$list['food_price']."</b></p>";
      echo '<div class="sp-quantity">
     <div class="sp-minus fff"> <a class="ddd">-</a> 
    </div><div class="sp-input"> <input type="text" name= "product_qty" class 
      ="quntity-input" value="1" /></div>
      <div class="sp-plus fff"> <a class="ddd">+</a> </div></div>';
    echo '<div class = "btn"><a href="info.php?foo_id='.$list['food_id'].'" 
          style="float:left">INFO</a></div>';
     echo '<div class = "add_b"><button>Add to Basket</button></div>';
        echo '<input type="hidden" name="food_code"   
         value="'.$list['food_id'].'" />';
        echo '<input type="hidden" name="type" value="add" />';
        echo '</form>';
        echo '</div>';
        }
             }

        ?>

它成功获取了行数,因为它两次回显按钮以显示找到的两条记录,这是正确的。问题是..它没有从数据库中获取标题、图像或价格。我尝试了很多建议,例如

           while($list = $get_foo->fetchAll(PDO::FETCH_ASSOC))

我收到错误 undefined method fetch all,我发现您需要安装驱动程序才能使 fetchAll 工作。我不想这样做。如何正确地从我的数据库中获取数据?

【问题讨论】:

  • 你没有使用PDO,你在这里使用mysqli
  • @D4V1D 好的,这是我第一次尝试。如何正确使用 pdo?
  • 并且fetchAll 不需要“安装驱动程序”。不过,这在 while ($list = ...) 条件下没有意义。逐行获取通常就足够了,foreach ($result as $list) 会更简单(如果您使用的是 PDO)。还可以使用 HEREDOC 代替繁琐的 echo .. 字符串修补。
  • 这里有一个很好的使用PDO的教程code.tutsplus.com/tutorials/…

标签: php mysql pdo mysqli fetch


【解决方案1】:

在此示例中,您没有使用 PDO 连接到数据库,因此您尝试在查询中接收的数据无效

 while($list = $get_foo->fetchAll(PDO::FETCH_ASSOC))

学习如何使用 PDO 连接、检索和插入数据(以及防止 SQL 注入的准备语句)的最佳地点是:

How can I properly use a PDO object for a parameterized SELECT query

http://php.net/manual/en/book.pdo.php

【讨论】:

    【解决方案2】:

    正如你们所说,我没有创建 PDO 连接,而是使用 mysqli。对不起,我已经成功创建了 PDO 连接并重写了代码。现在一切正常

    解决办法:

    db.php

              <?php
              $host   = 'localhost';
              $dbname = 'name';
              $username = "root";
              $password = "";
           $conn = new PDO('mysql:host=localhost;dbname=name', $username, 
           $password);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
            ?>
    

    然后替换了以下几行:

    结果.php

           if (isset($_GET['search'])){
    
           $search_query = $_GET['user_query'];
    
          $stmt = $conn->prepare("SELECT * FROM `food` 
           WHERE `food_keywords` LIKE :search ");
    
           $search_query = "%".$search_query."%";
    
          $stmt->bindParam(':search',$search_query, PDO::PARAM_STR);
    
    
           $stmt->execute();
    
    
        //fetch results set as object and output HTML
        while($obj = $stmt->fetch())
        {
            //rest goes here
    
          }
              }
                 ?>
    

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 2016-09-15
      • 1970-01-01
      • 2016-11-13
      • 2021-02-07
      • 2010-10-20
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多