我有一个from,它将变量列表输出到Joomla中的编码URL,然后在模型运行mySQL查询时返回结果。
问题是,用户可能会在搜索查询中输入一个空值,导致表单返回:mysite.com/index.php?option=com_mycom&view=myview&price=1000&city=&state=
我想我需要让我的表单运行一个没有POST/GET
输入没有价值的脚本。
但是,当同时获取mySQL查询时,我遇到了一些语法问题。
这是我到目前为止所拥有的:
$query = "
SELECT *
FROM ".$db->nameQuote('#__mls')."
WHERE "
.if ($zip > 0)
{.$db->nameQuote('MSTZIP')." = ".$db->quote($zip)."}
else {
}.
.if ($city != null)
{ AND ".$db->nameQuote('MSTCITY')." LIKE ".$db->quote($city)."}
else {
}.
.if ($bdrms != null)
{ AND ".$db->nameQuote('MSTBDRMS')." > ".$db->quote($bdrms)."}
else {
}.
.if ($bths != null)
{ AND ".$db->nameQuote('MSTBATHS')." > ".$db->quote($bths)."}
else {
}.
.if ($lprice != null, $hprice != null)
{ AND ".$db->nameQuote('MSTLISTPRC')." BETWEEN ".$db->quote($lprice)." AND ".$db->quote($hprice)."}
else {
}.
;
";
我对IF
陈述之间的运算符有误吗?我只是在语法中遗漏了什么?
另外,如果您有关于如何调试PHP的参考,那将非常感激。像JSfiddle这样的东西,但对于PHP。
答案 0 :(得分:2)
语法除了你的逻辑流是有缺陷的,如果用户省略了一个zip,语句将会读取WHERE AND...
,这将失败。可以使用WHERE 1=1
修复此问题,然后使用AND
条件相互加前缀。
如果if
语句为空,那么else
语句也可以不使用后面的if
。这不是一个不需要的错误。
另外,最后一个AND
语句有两个条件,我假设它们是&&
。你应该使用if(this==true && that==true)
表示法。即if
最后,除了我注意到的订单之外,没有任何顺序。您连接了$query = "
SELECT *
FROM ".$db->nameQuote('#__mls')."
WHERE 1 = 1 "
.if ($zip > 0){."
AND ".$db->nameQuote('MSTZIP')." = ".$db->quote($zip)
}
if ($city != null){."
AND ".$db->nameQuote('MSTCITY')." LIKE ".$db->quote($city)
}
// on and on like this perhaps
.";
"; // closes the string
语句,这是不需要的。我认为在这种情况下再次不是错误。只是不需要。实际上它可能会导致错误。请考虑以下事项:
{{1}}
我绝不支持这种类型的流程,它很快就会变得复杂。
调试可能会显示您收到的错误。