我需要跳过值,以防它们是空的。 我数据库中的数据看起来很相似:
gender : man
hair : blonde
eyes : blue
figure : slim
gender : woman
hair : blonde
eyes : blue
figure : slim
当我使用此查询时:
SELECT * FROM people WHERE figure = 'slim' AND hair = 'blonde' AND eyes = '' AND gender = 'man';
它没有返回任何内容,因为eyes
为空。
我从PHP中的表单获取的数据和空数据是用户不填写的字段。
你能帮帮我吗,我该怎么办呢? 作为数据库的驱动程序,我使用PDO。
答案 0 :(得分:1)
尝试使用IS NULL
AND eyes is NULL
答案 1 :(得分:1)
您需要逐个逐步执行这些值:
$sql = "SELECT * FROM people WHERE "
$appender = "";
if ( !empty($gender) )
{
$sql .= ( $appender . " gender = '" . $gender . "'");
$appender = " AND ";
}
if ( !empty($hair) )
{
$sql .= ( $appender . " hair= '" . $hair. "'");
$appender = " AND ";
}
...
...
答案 2 :(得分:0)
以下代码使用lazy binding来动态生成语句,并使用array_push
构建数组。
$params=array();
$sql ="SELECT * FROM people WHERE 1"
if (!empty($figure) ){
$sql .=" AND figure =? ";
array_push($params,$figure);
}
if (!empty($hair) ){
$sql .=" AND figure =? ";
array_push($params,$hair);
}if (!empty($eyes) ){
$sql .=" AND figure =? ";
array_push($params,$eyes);
}if (!empty($gender) ){
$sql .=" AND figure =? ";
array_push($params,$gender);
}
$stmt = $dbh->($sql);
$stmt->execute($params);