首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$params->在方括号之间设置数组

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

Stack Overflow用户
提问于 2014-09-23 19:33:07
回答 1查看 126关注 0票数 0

我在Joomla3.3中使用K2。我试图从k2_content文件中将params (项ids )设置为模块item.php。结果必须放在括号之间,类似于:

代码语言:javascript
复制
["96","68"]

我的代码是:

代码语言:javascript
复制
        $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.']';

如果我用打印测试,看上去没问题。但是把变量传递给祈祷,我得到了1064个错误。

代码语言:javascript
复制
$params->set('items', $autoresfinal);

为了测试我试过

代码语言:javascript
复制
$autoresfinal = ["96","68"];

而且效果很好。知道为什么不行吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-23 19:37:16

如果指定["x","y"],则将为分配一个数组。在这里,您将以字符串的形式转换数组。

试一试

代码语言:javascript
复制
   $result = [ ];
   foreach ($db->loadObjectList() as $key => $value) {
       $result[] = $value->id;
   }
   $params->set('items', $result);

此外,如果您希望将数组转换为字符串(可能是JSON),一种更快捷和更安全的方法是使用json_encode (与适当的选项一起使用)。

更新

上述情况仍然正确,但我错过了您对错误1064的抱怨。这是一个SQL语法错误,它发生在对结果进行编码之前。

正如Fred注意到的那样,原因是在这个查询中,#__k2_items需要用backticks进行转义:

代码语言:javascript
复制
 $query = "SELECT   *  FROM #__k2_items WHERE  
             extra_fields_search = '$myautor' AND catid !=1 " ;

应:

代码语言:javascript
复制
 $query = "SELECT   *  FROM `#__k2_items` WHERE  
             extra_fields_search = '$myautor' AND catid !=1 " ;

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

代码语言:javascript
复制
....search = 'D'Artagnan' AND ...

这会再次失败。或者,如果我调用一个作者‘Or ''=’‘,这个查询就会变成

代码语言:javascript
复制
...search = '' OR ''='' AND ...

因为'‘总是等于'',它将匹配您表中的所有记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26003280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档