使用PHP编写多个Mysqli语句

使用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

我正在使用Mysqli在我的网页上显示所有结果。但现在我想添加安全性,所以我想使用Mysqli准备的语句来获取数据,但我不知道如何实现它

我的网页URL如下

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 '&nbsp'; echo $row['type']; echo '&nbsp'; 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查询添加安全性时…我失败了…仍然希望我能从那里得到帮助。。。