我的代码没有任何问题,但我不能不知道,我是否应该用mysql_real_escape_string包装$ key?这只是我的数据库函数的一部分,它主要用于将数据从表名中拉出数据库,并将$ where作为函数的参数。 $ where是一个关联数组,其中键是列名,值是数据。
这是处理$ where数组的原因。在此之前,我有$ sql ='select * from'。 $表;
if(!empty($where)){
$where_count = count($where);
$sql .= ' WHERE ';
foreach($where as $key => $value){
$split_key = explode(' ', $key);
if(count($split_key) > 1){
$sql .= $key[0] . ' ' . $key[1] . ' "' . mysql_real_escape_string($value) . '" ';
} else {
$sql .= $key . ' = "' . mysql_real_escape_string($value) . '" ';
}
}
}
答案 0 :(得分:1)
从将要放入查询中的用户过滤 ANY INPUT 。毫无疑问!
因此,如果用户提供了密钥,则为YES,如果以安全的方式生成密钥,则为NO。
看看SQL Injection,了解为什么必须进行过滤。
答案 1 :(得分:1)
我不确定这里有什么问题,但我可以看到一个错误:
$sql .= $key[0] . ' ' . $key[1] . ' "' . mysql_real_escape_string($value) . '" ';
应该是
$sql .= $split_key[0] . ' ' . $split_key[1] . ' "' . mysql_real_escape_string($value) . '" ';
答案 2 :(得分:1)
如果您真的想引用字段名称,请使用反引号。
请参阅http://dev.mysql.com/doc/refman/5.6/en/identifiers.html
以下语句创建一个名为a`b的表,其中包含一个 名为c“d:
的列CREATE TABLE `a``b` (`c"d` INT);