我在Joomla3.3中使用K2。我试图从k2_content文件中将params (项ids )设置为模块item.php。结果必须放在括号之间,类似于:
["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.']';如果我用打印测试,看上去没问题。但是把变量传递给祈祷,我得到了1064个错误。
$params->set('items', $autoresfinal);为了测试我试过
$autoresfinal = ["96","68"];而且效果很好。知道为什么不行吗?谢谢。
发布于 2014-09-23 19:37:16
如果指定["x","y"],则将为分配一个数组。在这里,您将以字符串的形式转换数组。
试一试
$result = [ ];
foreach ($db->loadObjectList() as $key => $value) {
$result[] = $value->id;
}
$params->set('items', $result);此外,如果您希望将数组转换为字符串(可能是JSON),一种更快捷和更安全的方法是使用json_encode (与适当的选项一起使用)。
更新
上述情况仍然正确,但我错过了您对错误1064的抱怨。这是一个SQL语法错误,它发生在对结果进行编码之前。
正如Fred注意到的那样,原因是在这个查询中,#__k2_items需要用backticks进行转义:
$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 " ;另外,您可能希望使用准备语句和参数化查询(查找示例这里),而不是仅仅将$myautor插入字符串中。如果您有一个名为D‘’Artagnan的作者,则查询将成为
....search = 'D'Artagnan' AND ...这会再次失败。或者,如果我调用一个作者‘Or ''=’‘,这个查询就会变成
...search = '' OR ''='' AND ...因为'‘总是等于'',它将匹配您表中的所有记录。
https://stackoverflow.com/questions/26003280
复制相似问题