省略php查询中的空值

时间:2012-12-05 18:12:03

标签: php mysql joomla

我有一个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。

1 个答案:

答案 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}}

我绝不支持这种类型的流程,它很快就会变得复杂。

调试可能会显示您收到的错误。