$ params->在方括号之间设置数组

时间:2014-09-23 19:33:08

标签: php mysql joomla3.0

我在Joomla 3.3中使用K2。 我正在尝试将params(items id)设置为item.php文件中的模块k2_content。 结果必须在括号之间,例如:

["96","68"]

我的代码是:

        $query = "SELECT   *  FROM #__k2_items WHERE  extra_fields_search = '$myautor' AND catid !=1 " ;
        $db->setQuery($query);
        $losautores = $db->loadObjectList();
        $result = array();
        foreach ($losautores as $key => $value) {
       $result[] = '" '.$value->id.' "';
       }

      $string_version = implode(',', $result);
     $autoresfinal = '['.$string_version.']';

如果我使用打印测试,看起来不错。 但是将var传递给pramas,我得到1064错误。

$params->set('items', $autoresfinal);

测试我试过

$autoresfinal = ["96","68"];

工作正常。 知道为什么不起作用? 谢谢。

1 个答案:

答案 0 :(得分:1)

如果您指定["x","y"],则指定数组。在这里,您将使用字符串转换数组。

尝试简单

   $result = [ ];
   foreach ($db->loadObjectList() as $key => $value) {
       $result[] = $value->id;
   }
   $params->set('items', $result);

此外,如果您想将数组转换为字符串(可能是JSON),则使用json_encode(使用相应的options)的速度更快,更安全。

更新

以上情况仍属实,但我错过了有关错误1064 的投诉。这是一个SQL syntax error,它会在您对结果进行编码之前发生。

原因 - 正如Fred -ii-注意到的那样,在这个查询中,#__k2_items需要使用反引号进行转义:

 $query = "SELECT   *  FROM #__k2_items WHERE  
             extra_fields_search = '$myautor' AND catid !=1 " ;

应该是:

 $query = "SELECT   *  FROM `#__k2_items` WHERE  
             extra_fields_search = '$myautor' AND catid !=1 " ;

此外,您可能希望使用预准备语句和参数化查询(查找示例here),而不是仅将$myautor插入字符串中。如果您有一位名为 D' Artagnan 的作者,则查询将成为

....search = 'D'Artagnan' AND ...

再次失败。或者如果我打电话给作者'或者' =' ,查询将变为

...search = '' OR ''='' AND ...

其中,因为''始终等于'',将匹配所有表格中的记录。