繁体   English   中英

如何有条件地在PHP查询中添加一个子句?

[英]How do I conditionally add a clause to my query in PHP?

在我的搜索表中,我拥有男性,女性和两者兼具的价值。 如果您同时选择两者,则我不希望在哪里有“ sex ='$ sex'”

我应该这样做吗:

if(empty($sex)){ // value empty if you chose "both"
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '%$firstname%' OR lastname LIKE '%$lastname%')";
}else{
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '%$firstname%' OR lastname LIKE '%$lastname%') AND sex = '$sex'";
}

还是有一个聪明的方式写这个?

不要永远无法从用户输入的SQL字符串。 这就是准备好的语句的用途。 它们是安全的,重新执行时性能更快,并且易于使用,因此请使用它们:

$sql = "
  SELECT
    firstname, lastname, id, user_name, sex, last_access, bostadsort
  FROM
    users 
  WHERE
    (firstname LIKE '%'|| ? || '%' OR lastname LIKE '%'|| ? || '%')
    AND Sex = CASE ? WHEN 'both' THEN Sex ELSE ? END
";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ssss', $firstname, $lastname, $sex, $sex);

$result = $stmt->execute();

如何不重复自己:

$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '%$firstname%' OR lastname LIKE '%$lastname%')";

if(!empty($sex)){
    $query = $query . " AND sex = '$sex'";
}

您可以这样做:

$sql = "SELECT ..."; 

if (!empty($gender))
{
    $sql .= " AND gender = '$gender'";
}

并确保注意sql注入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM