语言: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);
}
最佳答案
$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 短语周围的 '' 标记。
关于php - 将 NULL 传递给旨在在 PHP 中构建 MySQL 查询的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028345/