我在 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/