使用PHP编写多个Mysqli语句
我正在使用Mysqli在我的网页上显示所有结果。但现在我想添加安全性,所以我想使用Mysqli准备的语句来获取数据,但我不知道如何实现它 我的网页URL如下使用PHP编写多个Mysqli语句,php,mysqli,prepared-statement,sql-injection,bindparam,Php,Mysqli,Prepared Statement,Sql Injection,Bindparam,我正在使用Mysqli在我的网页上显示所有结果。但现在我想添加安全性,所以我想使用Mysqli准备的语句来获取数据,但我不知道如何实现它 我的网页URL如下 www.example.com/list.php?type=Car&brand=All 首先,我检查brand字段中的值是否为全部,然后创建一个变量,如 $brand=""; 如果不是全部的话 $brand="AND brand='$_GET[brand]'"; 我的问题变成了 SELECT * FROM Table WHER
www.example.com/list.php?type=Car&brand=All
首先,我检查brand字段中的值是否为全部,然后创建一个变量,如
$brand="";
如果不是全部的话
$brand="AND brand='$_GET[brand]'";
我的问题变成了
SELECT * FROM Table WHERE type='$_GET[type]' $brand;
它对我来说非常有效,没有预先准备好的声明,就好像品牌价值是“全部”,它显示所有结果,如果是“Maruti”之类的东西,它显示存储在我的表中的品牌名为Maruti的汽车
类似地,我还创建了一个变量$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();
?>
现在,如果brand值是'All',那么它会在bind_param语句中导致错误,因为$brand在该语句中为null。若值是像‘Maruti’这样的正确值,那个么它什么也不显示……并没有错误,只是空屏幕
这是不可能做到这一点,或者我做了一些错误的编码,请帮助我???提前感谢…
其中type=$品牌
不起作用,你需要一个额外的占位符?
@Fred ii-你能告诉我一件事有多好吗需要读取为$type=$\u GET['type']的代码>代码>---如果($brand!='All')你的我相信你(可能)想删除否定代码>字符,替换为=
如果($brand='All')
但是,$stmt->bind_参数(“ss”,$type,$brand)代码>尝试执行此操作时可能会失败^。TBH,我以前从未使用过这种类型的代码,所以对我来说有点困惑。您可能需要添加附加的条件语句来绑定。当然,我在这里想得很清楚。@Fred ii-谢谢你的努力…我已经想到在这个网站上使用这样的变量,这个想法对我来说绝对有效…现在当我想为mysql查询添加安全性时…我失败了…仍然希望我能从中得到帮助…WHERE type=$品牌
不起作用,你需要一个额外的占位符?
@Fred ii-你能告诉我一件事有多好吗需要读取为$type=$\u GET['type']的代码>代码>---如果($brand!='All')你的我相信你(可能)想删除否定代码>字符,替换为=
如果($brand='All')
但是,$stmt->bind_参数(“ss”,$type,$brand)代码>尝试执行此操作时可能会失败^。TBH,我以前从未使用过这种类型的代码,所以对我来说有点困惑。您可能需要添加附加的条件语句来绑定。当然,我在这里想得很清楚。@Fred ii-谢谢你的努力…我已经有了在这个网站上使用类似变量的想法,这个想法对我来说绝对有效…现在当我想为mysql查询添加安全性时…我失败了…仍然希望我能从那里得到帮助。。。