如何使用 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
正如你们所说,我没有创建 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
}
}
?>
我在我的网站上实现了一个搜索框,在我决定防止 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
正如你们所说,我没有创建 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
}
}
?>