我对 php 和一般编码还很陌生。
我有一系列条件需要测试它们是否已设置。 它们是 $option1, $option2, $option3
if (isset($option1)){
if (isset($option2)){
if (isset($option3)){
$query = "SELECT *
FROM Group
WHERE FirstOption = '$option1' AND SecondOption = '$option2' AND ThirdOption = '$option3'";
}
else {
$query = "SELECT *
FROM Group
WHERE FirstOption = '$option1' AND SecondOption = '$option2";
}
}
else {
$query = "SELECT *
FROM Group
WHERE FirstOption = '$option1' AND ThirdOption = '$option3";
}
}
else {
// .. snip, much more duplicated code ..
}
所以这里的问题是我需要根据条件是否设置对 mysql 进行唯一查询。但它们彼此之间有很大的关系,我实际上有 7 种选择,所以分支绝对是巨大的!我差点把自己搞糊涂了,三点停了下来。
必须有一种更好的写法 - 谁能帮助我更好地理解?
最佳答案
无需动态 sql 构建。只需使用逻辑。
SELECT *
FROM Group
WHERE (FirstOption = '$option1' or '$option1' = '')
AND (SecondOption = '$option2' or '$option2' = '')
AND (ThirdOption = '$option3' or '$option3' = '')
理想情况下,您会使用占位符和准备好的语句,但出于教学目的,以上内容最为清晰。
万一有人好奇 - 对此没有显着的查询开销。任何现代数据库引擎都会将 '$option1' = ''
表达式优化为常量值,仅将其计算为 bool 值一次。
关于php - 使用 "AND"表达式构建动态 SQL 而不会混淆嵌套条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14351617/