0

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

4

1 回答 1

2

除了你的逻辑流程之外的语法是有缺陷的,如果用户省略了 zip,则语句将读取WHERE AND...哪个将失败。这个问题可以通过使用WHERE 1=1然后在有条件的前面加上前缀来解决AND

如果它们是空白的,您的if陈述也可以没有以下内容。else这不是一个错误,只是不需要。

另外,最后一条if语句有两个条件,我假设它们是AND. 你应该使用&&符号。IEif(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

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

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

于 2012-12-05T18:33:43.747 回答