Как правилно да извлечете обект с помощта на PDO и php

Внедрих поле за търсене в моя уебсайт, което работеше перфектно, докато не реших да защитя срещу 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="/bginfo.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))

получавам грешката недефиниран метод fetch all, открих, че трябва да инсталирате драйвер, за да работи fetchAll. което не искам да правя. Как мога правилно да извлека данни от моята база данни?


person Community    schedule 29.03.2015    source източник
comment
Вие не използвате PDO, вие използвате mysqli тук.   -  person D4V1D    schedule 29.03.2015
comment
@D4V1D добре, това е първият ми опит за това. Как да използвам правилно pdo?   -  person    schedule 29.03.2015
comment
И fetchAll няма да изисква инсталиране на драйвер. Все пак няма смисъл при условие while ($list = ...). Извличането ред по ред често е достатъчно и foreach ($result as $list) би било по-просто (ако използвате PDO). Използвайте също HEREDOC вместо досадното echo .. коригиране на низове.   -  person mario    schedule 29.03.2015
comment
Ето един добър урок за използване на PDO code.tutsplus.com/tutorials/   -  person priyank    schedule 29.03.2015


Отговори (1)


В този пример вие не се свързвате към базата данни с помощта на PDO и следователно данните, които се опитвате да получите обратно във вашата заявка, са невалидни

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

Най-доброто място да научите как да свързвате, извличате и вмъквате данни с помощта на PDO (заедно с подготовката на изрази, което е функцията за предотвратяване на SQL инжектиране) е:

Как мога правилно да използвам PDO обект за параметризирана заявка SELECT

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

person Conor Reid    schedule 29.03.2015