我正在使用Mysqli在我的网页上显示所有结果。但现在我想添加安全性,所以我想使用Mysqli预处理语句来获取数据,但我很困惑如何实现它。
我的网页网址就像
www.example.com/list.php?type=Car&brand=All
首先,我检查品牌字段中的值,如果它是全部,那么我创建一个像
这样的变量$brand="";
如果不是全部那么
$brand="AND brand='$_GET[brand]'";
我的查询变为
SELECT * FROM Table WHERE type='$_GET[type]' $brand;
它完美地为我工作,没有准备好的陈述,好像品牌价值是'所有'它显示所有结果,如果它是其他类似于' Maruti'它显示存储在我的表格中的品牌名称为Maruti的汽车。
同样,我也创建了一个变量$ where where where where where。
$where="where type='$_GET[type]' $brand AND status='a'";
if(isset($_GET['sort'])){
if(($_GET['sort'])=='ASC'){
$where="where type='$_GET[type]' $brand AND status='a' ORDER BY price";
}
elseif(($_GET['sort'])=='DESC'){
$where="where type='$_GET[type]' $brand AND status='a' ORDER BY price DESC";
}
}
如果我不使用这些变量' $ brand'和' $ where'然后我将不得不重复它。到目前为止,您可以看到我在4个查询中使用了 $ brand 。
我试过了
<?php
$type='$_GET[type]';
if($brand!='All'){
$brand="AND brand= ?";
}
else{
$brand="";
}
if ($stmt = $mysqli->prepare("SELECT * FROM Table WHERE type= ? $brand")) {
/* bind parameters for markers */
$stmt->bind_param("ss", $type, $brand);
/* execute query */
$stmt->execute();
/* bind result variables */
$res = $stmt->get_result();
while ($row = mysqli_fetch_array($res)) {
?>
<li><?php echo $row['name']; echo ' '; echo $row['type']; echo ' '; echo $row['brand']; ?></li>
<?php
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
?>
现在,如果品牌价值是&#39;全部&#39;然后它会在bind_param语句中导致错误,因为$ brand在此为空。如果价值是正确的,像Maruti&#39;然后它什么都没显示......没有错误只是空屏。
是不是可以这样做,或者我在编码时做错了,请帮帮我???提前谢谢......