我对joomla有以下查询:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select($db->quoteName(array('name','username','depto')))
->from($db->quoteName('#__users','a'))
->join('RIGHT', $db->quoteName('#__comprofiler','b').'ON('.$db->quoteName('a.id').' = '.$db->quoteName('b.id').')')
->where($db->quoteName('depto').' IN '.$db->quoteName(array($my_array)))
->order($db->quoteName('name'));
$db->setQuery($query);
$result = $db->loadObjectList();
在$ my_array中我有一组值我想用来过滤我的结果,例如:
$sql = "SELECT * FROM Users WHERE depto IN ($my_array)";
我确实试图使用内爆,但我根本没有得到任何结果。
$my_array = implode(",",$my_array);
任何人都知道如何使用db->逃避这种情况?
答案 0 :(得分:1)
这里你不应该有quoteName,你没有引用一个名字:
$db->quoteName(array($my_array)))
你需要
. ' (' . implode(',', $my_array) . ')'
另外我想补充一点,如果你使用quoteName()
的原因是数组是一个字符串数组,你需要更多地计划一下。首先你应该使用quote(),因为这是你用来获得正确的字符串引用。但其次,你将不得不更好地计划内爆,以便让$db->quote()
包裹在数组中的每个元素周围。幸运的是,$ db-> quote()接受一个数组作为输入。所以你真正想要的是更像这样的事情
. ' (' . $db->quote($my_array) . '")'
答案 1 :(得分:0)
试试这段代码:
$sql = "SELECT * FROM Users WHERE depto IN ('".implode("', '", $my_array)."')";