我试图将一个数组内存到一个sql语句中。我的问题是,值是如何在字符串和日期等周围引用值的最佳方法,而不是围绕int值?
CNC中 下面的新代码,问题我是hainv使用反引号而不是引用值,感谢Mark Baker,就准备停止sql注入的语句而言,下面的代码是否足够?列名由代码设置,所有的vaules都是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);
答案 0 :(得分:0)
使用is_int()
:
foreach($HardwareDistribution as $value) {
if(is_int($value)) {
//execute your query here
}
else {
//execute your query with quotations here
}
}
此外,正如其他人所建议的那样,您可能需要查看prepared statements以阻止SQL injection。
答案 1 :(得分:0)
在将数据加载到数组中时,可以在需要引号的值周围添加引号。如上所述,您可能还想查看prepared statements
答案 2 :(得分:0)
最好的方法是使用已定义的列名称和值的持有者来创建MySQL语句。如果查询是动态的,那么你应该 - 在非常租约 - 允许列名称的“白名单”,这样你的数据库就不会受到大规模分配攻击的影响。