多个Mysqli使用PHP编写语句

时间:2017-02-09 14:19:57

标签: php mysqli prepared-statement sql-injection bindparam

我正在使用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 '&nbsp'; echo $row['type']; echo '&nbsp'; echo $row['brand']; ?></li>
<?php   
        }
        /* close statement */
        $stmt->close();
    }

    /* close connection */
    $mysqli->close();
?>

现在,如果品牌价值是&#39;全部&#39;然后它会在bind_param语句中导致错误,因为$ brand在此为空。如果价值是正确的,像Maruti&#39;然后它什么都没显示......没有错误只是空屏。

是不是可以这样做,或者我在编码时做错了,请帮帮我???提前谢谢......

0 个答案:

没有答案