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

标签 php mysql joomla3.0

我在 Joomla 3.3 中使用 K2。 我正在尝试将参数(items ids)设置为 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"];

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

最佳答案

如果您分配["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 ...

这又会失败。或者,如果我调用作者' OR ''=',查询将变为

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

由于 '' 始终等于 '',因此将匹配表中的所有记录。

关于php - $params->在方括号之间设置数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26003280/

相关文章:

php - 如何在 PHP 中检查不完整的 POST 请求

python - 仅当条目不存在时才将条目添加到数据库的正确方法;使用 python + peewee

mysql - Golang - 从 MySQL 存储/检索小数

joomla - 如何根据 Joomla 中的用户组重定向用户

php - 比在配置文件中以纯文本形式存储 mysql 密码更好的方法?

php - 使用 PHP 从页面中提取 html 代码以推断一些图像

php - 当我调用 session_start() 时如何修复权限错误?

mysql - 如何使用与主键具有不同列名的外键?

joomla - JFolder::create:无法创建目录 - Joomla

php - 修改Joomla html5模块chrome