0

我正在尝试将数组内爆到 sql 语句中。我的问题是,值如何在字符串和日期等周围引用而不是在 int 值周围引用的最佳方式是什么?

-edit- 下面的新代码,我遇到的问题是在值上使用反引号而不是引号,感谢 Mark Ba​​ker,至于准备好的语句来停止 sql 注入,下面的代码就足够了吗?列名由代码设置,所有值都是 myslqi_real_escape'ed。

    $HardwareDistribution["HardwareID"]=mysqli_real_escape_string($con,$_POST["HardwareID"]);
    $HardwareDistribution["UserID"]=mysqli_real_escape_string($con,$_POST["UserID"]);
    $HardwareDistribution["DateGiven"]=mysqli_real_escape_string($con,$_POST["DateGiven"]);
    $HardwareDistribution["ConditionGiven"]=mysqli_real_escape_string($con,$_POST["ConditionGiven"]);
    $SQL_AssignHardware="INSERT INTO HardwareDistribution (`".implode("`,`",array_keys($HardwareDistribution))."`) VALUES ('".implode("','",array_values($HardwareDistribution))."')";
    mysqli_query($con,$SQL_AssignHardware);
4

3 回答 3

0

当您将它们加载到数组中时,您可以在需要引号的值周围添加引号。如前所述,您可能还想查看准备好的语句

于 2013-08-14T15:09:11.500 回答
0

使用is_int()

foreach($HardwareDistribution as $value) {
    if(is_int($value)) {
        //execute your query here
    }
    else {
        //execute your query with quotations here
    }
}

此外,正如其他人所建议的那样,您可能需要查看准备好的语句以防止SQL 注入

于 2013-08-14T15:08:56.570 回答
0

最好的方法是使用定义的列名和值的占位符来制作您的 MySQL 语句。如果查询是动态的,那么您应该至少拥有一个允许列名的“白名单”,这样您的数据库就不会容易受到批量分配攻击。

于 2013-08-14T15:12:33.897 回答