我有这样的查询:
$stmt = $db->prepare("SELECT location.id FROM location WHERE location.city = :city AND location.country = :country");
$stmt->execute(array(':city' => $cityVar, ':country' => $countryVar));
$locationID = $stmt->fetchColumn();
我遇到了一个问题,因为在数据库中空city
列有时为空,有时是空字符串(我知道它是错误的,但是没有办法改变它)。当我的$cityVar
变量为空时,我需要获取所有需要country
的条目,但现在我只得到city
列为空字符串的那些(我不知道那些{ {1}}为空)。
我提出的唯一解决方案是修改查询本身,例如:
city
但我想知道是否有更合法的方法来解决这个问题。注意:我需要搜索更多列,例如$sql = "SELECT location.id FROM location WHERE location.country = :country ";
if ($cityVar) {
$sql .= "AND location.city = :city ";
}
。
答案 0 :(得分:2)
使用COALESCE(city, '')
- 它会将NULL
字符串强制为空字符串""
。如果您有很多城市和大量的查询,您可以在合并字段上创建索引以促进搜索。
"SELECT location.id FROM location WHERE COALESCE(location.city, '') = :city "