0

语言: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

这当然不会产生任何结果。有任何想法吗?

回答

    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

4 回答 4

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 短语周围的 '' 标记。

于 2013-02-22T16:11:17.937 回答
0

请使用此查询。

SELECT * FROM db_profilesWHERE committedIS NULL LIMIT 100。

删除单引号。

于 2013-02-22T16:10:57.250 回答
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
于 2013-02-22T16:11:05.593 回答
0

将值填充到查询中时,您需要明确检查以下内容:

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

请注意,当您不熟悉 MySQL 和 PHP 时,您应该尽快开始使用准备好的语句。它们对 SQL 注入漏洞最安全且易于使用。您可以从这里开始学习使用它们。

于 2013-02-22T16:11:22.500 回答