将NULL传递给用于在PHP中构建MySQL查询的函数

时间:2013-02-22 16:07:37

标签: php mysql

语言:PHP和MySQL

我在数据库中有一些行,其值为NULL。我有一个函数,它在收到$ params数组时构建查询。这是该函数中的相关代码段(用于构建WHERE子句):

    if (isset($params['where'])) {
        $query .= "WHERE ";
        $count = count($params['where']);
        foreach ($params['where'] as $key => $value) {
            $count--;
            if ($count) {
                $query .= "`$key` ".$value['sign']." '".$value['text']."' AND ";
            } else {
               $query .= "`$key` ".$value['sign']." '".$value['text']."' ";
            }
        }
    }

问题在于,当我将$ value ['text']设置为null时,结果如下:

SELECT * FROM `db_profiles` WHERE `committed` IS '' LIMIT 100

如果我将它设置为$ value ['text'] ='NULL',那么我得到以下内容:

SELECT * FROM `db_profiles` WHERE `committed` IS 'NULL' LIMIT 100

当然,什么都不产生。有什么想法吗?

ANSWER

    if (isset($params['where'])) {
        $where_segment = array ();
        foreach ($params['where'] as $key => $value) {
            if (is_null($value['text'])) {
                $where_segment[] = "`".$key."`"." IS NULL";
            } else {
                $where_segment[] = "`$key` ".$value['sign']." '".$value['text']."' ";
            }
        }
        $query .= " WHERE ".implode('AND', $where_segment);
    }

4 个答案:

答案 0 :(得分:2)

  $string_array = array();

    foreach($params['where'] as $field => $value) {

        if(is_null($value)) {
            $string_array[] = "`$field` IS NULL";
        }
        else {
            $string_array[] = "`$field`='$value'";
        }

    }

 $where_string = "WHERE ".implode(" AND ", $string_array);


 $sql = "SELECT * FROM `db_profiles` $where_string";

请注意,如果$ value为NULL,则省略NULL标记周围的''标记。

答案 1 :(得分:0)

请使用此查询。

SELECT * FROM db_profiles WHERE committed IS NULL LIMIT 100。

删除单引号。

答案 2 :(得分:0)

这应该可以帮助你没有单引号

 SELECT * FROM `db_profiles` WHERE `committed` IS NULL LIMIT 100

你可以将你的变量设置为null

 $value['text'] = NULL;

然后在您的查询中

 SELECT * FROM `db_profiles` WHERE `committed` IS $value['text'] LIMIT 100

答案 3 :(得分:0)

在将值填充到查询时,您需要显式检查以下内容:

if(is_null($value)) {
    $query . ' WHERE something IS NULL';
} else {
    $query . ' WHERE something \'' . $value . '\'';
}

请注意,当您不熟悉MySQL和PHP时,应尽快开始使用预准备语句。它们最安全,可以抵御SQL注入漏洞并且易于使用。您可以启动here以学习使用它们。