这与用户最近在我的书 SQL Antipatterns 的论坛上问我的问题非常相似。我给了他类似的答案:
$sql = "SELECt name, address, city FROM tableA JOIN tableB ON tableA.id = tableB.id";$params = array();$where = array();if (isset($price) ) { $where[] = '(price = :price)'; $params[':price'] = $price;}if (isset($sqft) ) { $where[] = '(sqft >= :sqft)'; $params[':sqft'] = $sqft;}if (isset($bedrooms) ) { $where[] = '(bedrooms >= :bedrooms)'; $params[':bedrooms'] = $bedrooms;}if ($where) { $sql .= ' WHERe ' . implode(' AND ', $where);}$stmt = $dbh->prepare($sql);$stmt->execute($params);$result_set = $stmt->fetchAll(PDO::FETCH_ASSOC);


