我在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"];
工作正常。 知道为什么不起作用? 谢谢。
答案 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 ...
其中,因为''始终等于'',将匹配所有表格中的记录。