Внедрих поле за търсене в моя уебсайт, което работеше перфектно, докато не реших да защитя срещу 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. което не искам да правя. Как мога правилно да извлека данни от моята база данни?
PDO
, вие използватеmysqli
тук. - person D4V1D   schedule 29.03.2015fetchAll
няма да изисква инсталиране на драйвер. Все пак няма смисъл при условиеwhile ($list = ...)
. Извличането ред по ред често е достатъчно иforeach ($result as $list)
би било по-просто (ако използвате PDO). Използвайте също HEREDOC вместо досаднотоecho ..
коригиране на низове. - person mario   schedule 29.03.2015