我有3组字段(每组包含2个字段),我必须检查某些条件。我不检查每个字段,而是一些组合,例如:


团体价格EurBus,价格LocalBus
组价格EurAvio,价格LocalAvio
group priceEurSelf,priceLocalSelf


我的示例(为清晰起见而设置的格式)—如何进行改进?

$rest .="
WHERE
  (
    ((priceEurBus+(priceLocalBus / ".$ObrKursQuery.")) <= 400)
    OR
    ((priceEurAvio+(priceLocalAvio / ".$ObrKursQuery.")) <= 400)
    OR
    ((priceEurSelf+(priceLocalSelf / ".$ObrKursQuery.")) <= 400)
  )
";


$ObrKursQuery是我用来将本地货币转换为欧元的值。

最佳答案

性能改进:您的查询基于OR,这意味着一旦发现其中一个条件成立,它将立即停止评估条件。尝试以某种方式下达您的条件,例如,在您的情况下,第一张支票最有可能低于400。

安全性改进:使用准备好的语句并过滤掉变量,然后再使用它们。在$ ObrKursQuery的情况下,如果它来自用户输入或不受信任的来源,则这是一个非引号的数字值,您将面临各种各样的sql注入问题(包括算术sql注入:如果该值为0) ,您会得到一个DivedByZero错误,可以将其用作盲SQL注入条件)。

可读性的提高:确保编写代码的方式始终保持一致,并且如果可能的话,遵循一些公认的事实上的标准,例如以小写字母开头变量名:$ ObrKursQuery-> $ obrKursQuery。另外,为了便于自我记录代码,请为变量选择名称,这些变量表示它们的含义:$ ObrKursQuery-> $ conversionRatio。

可维护性/可伸缩性方面的改进:对于400,请使用常量而不是固定值。将来更改该值时,您将希望仅在一个位置而不是在整个代码中进行更改。

10-08 03:27