如何使用 PDO 和 php 正确获取 object

How to properly fetch object using PDO and php

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

我的代码

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))

我收到错误未定义的方法全部获取,我发现您需要安装 driver 才能使 fetchAll 工作。我不想这样做。我怎样才能正确地从我的数据库中获取数据?

在此示例中,您没有使用 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

正如你们所说,我没有创建 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);

        ?>

然后替换了以下几行:

result.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

      }
          }
             ?>