【问题标题】:Parse error: syntax error, unexpected T_IF解析错误:语法错误,意外的 T_IF
【发布时间】:2011-12-21 15:53:24
【问题描述】:
$query = "SELECT a.*, cc.name AS category, dd.ezcity AS proploc, ee.name AS statename, ff.name AS cnname, ss.dealer_name AS propseller, u.name AS editor"

. "\n FROM #__ezrealty AS a"

. "\n LEFT JOIN #__ezrealty_catg AS cc ON cc.id = a.cid"

. "\n LEFT JOIN #__ezrealty_locality AS dd ON dd.id = a.locid"

. "\n LEFT JOIN #__ezrealty_state AS ee ON ee.id = a.stid"

. "\n LEFT JOIN #__ezrealty_country AS ff ON ff.id = a.cnid"

. "\n LEFT JOIN #__ezrealty_profile AS ss ON ss.mid = a.owner"

. "\n LEFT JOIN #__users AS u ON u.id = a.checked_out"

. ( count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "")

. if ( isset ($_POST['idSearch']) ) 

    . { " WHERE a.id = " . $_POST['idSearch']  ; }

. "\n ORDER BY ". $order

. "\n LIMIT $pageNav->limitstart, $pageNav->limit"

;

我在这里没有得到错误的语法:( ,,并且它一直返回相同的错误意外 T_IF

【问题讨论】:

  • . (!empty($_POST['idSearch']) ? " WHERE a.id = " . $_POST['idSearch'] : "\n ORDER BY ". $order ."\n LIMIT $pageNav->limitstart, $pageNav->limit"); 这是在所有页面中搜索的正确解决方案,而不仅仅是显示的页面

标签: php sql joomla syntax-error


【解决方案1】:

删除 . (点)在 if 语句之前。因为 if 语句本身不是字符串,所以不能直接连接它。

【讨论】:

    【解决方案2】:

    不要这样做:

    . if (condition) { value_if_true; }
    

    改为这样做:

    . (condition ? value_if_true : value_if_false)
    

    【讨论】:

      【解决方案3】:

      if 只能是一个声明:您将它用作expression。它不返回任何内容,并且不能在另一个语句中使用。

      但是,您可以使用三元运算符来做到这一点:

      . ( isset ($_POST['idSearch']) ?  " WHERE a.id = " . $_POST['idSearch'] : '') 
      

      这表示“如果设置了$_POST['idSearch'],则添加该字符串,否则添加空字符串。

      请注意,您应该真正查看您的代码,因为在我上面发布的代码中存在明显的 SQL 注入。任何人都可以在您的数据库上执行任意代码。确保清理您的输入,最好采用准备好的语句和参数化查询,以使您的代码更安全。

      【讨论】:

      • SQL=SELECT a.*, cc.name AS category, dd.ezcity AS proploc, ee.name AS statename, ff.name AS cnname, ss.dealer_name AS propseller, u.name AS editor从 jos_ezrealty 作为左连接 jos_ezrealty_catg AS cc ON cc.id = a.cid 左连接 jos_ezrealty_locality AS dd ON dd.id = a.locid 左连接 jos_ezrealty_state AS ee ON ee.id = a.stid 左连接 jos_ezrealty_country AS ff ON ff .id = a.cnid LEFT JOIN jos_ezrealty_profile AS ss ON ss.mid = a.owner LEFT JOIN jos_users AS u ON u.id = a.checked_out WHERE a.id = ORDER BY a.id DESC LIMIT 0, 5
      • 我不太确定应该如何调试它,但我猜$_POST['idSearch'] 已设置但为空。我可能是错的。你没有提供很多细节......
      • 它是空的,假设如果它是空的,什么都不做并检索所有数据而不是特定的数据,我想我会通过超链接和查询字符串获取帖子:),thnx全部
      【解决方案4】:

      我相信你想把它变成一个邪恶的三元运算符:

      . (count ...)
      . (isset($_POST['idSearch']) ? ' WHERE a.id = ' . $_POST['idSearch'] : '')
      . "\n ORDER BY" ...
      

      【讨论】:

      • 为什么三元运算符是邪恶的?
      • @Rocket 我不认为是这样,但有很多开发人员这样做。问题的一个示例是您无法在事后向条件添加操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多