将条件附加到当前查询[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

例如,我们有mysqliselect查询:

$sql = "SELECT * FROM table WHERE cat = 1";

并且想要基于query将一些额外的query string附加到上面的查询,我尝试过这样的事情:(这只是示例,而不是我的原始代码)

$keyw = $_GET["k"];

if($keyw){
$cleanKeyw = mysqli_real_escape_string($connection, $keyw);

$addQ= "AND name LIKE '%$cleanKeyw%' OR text LIKE '%$cleanKeyw%'";
} else {
$addQ= "";  
}

$sql = "SELECT * FROM table WHERE cat = 1 $addQ";

不是这一个,我几乎还有10个statment想要附加到当前的query

如果设置query查询字符串,我想添加k,它可以工作,但我想确定,这样做是否安全或正确?因为它是基于我的逻辑而且我是php的新手并且不知道有技术方法可以做到这一点吗?

另外我想知道有没有办法通过prepared statments这样做?

php mysqli
1个回答
1
投票

不幸的是,大多数答案都过于宽泛。没有正确或错误的方式,你已经逃脱了你的投入(这很棒)。

您可以考虑将您的wheres构建为数组,然后将它们拼接在一起。

$wheres = [];

$wheres[] = 'cat = 1';

if ($keyw) {
    // escape etc
    $wheres[] = 'name LIKE '%$cleanKeyw%' OR text LIKE '%$cleanKeyw%''
}

$wheres = implode(" AND ", $wheres);

$sql = "SELECT * FROM table WHERE $wheres";

然后你可以随着时间的推移添加更多的$wheres[]

© www.soinside.com 2019 - 2024. All rights reserved.