言語: 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);
}