如果值为空,则跳过值

时间:2014-01-31 18:36:56

标签: php mysql pdo

我需要跳过值,以防它们是空的。 我数据库中的数据看起来很相似:

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。

3 个答案:

答案 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);