语言: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);
}
答案 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以学习使用它们。