查询使用数组

时间:2012-03-01 21:46:44

标签: php mysql

我的代码没有任何问题,但我不能不知道,我是否应该用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) . '" ';
            }
        }
    }

3 个答案:

答案 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);