如何在Joomla查询中使用MySQL IN - 语法问题

时间:2015-07-02 10:53:04

标签: php mysql joomla

我有一个名为$del_ids的变量,它使用array_keys()函数:

$del_ids = implode("','", array_keys($_POST['gallery']));

$del_ids输出一个如下所示的数组:

Array
(
    [2] => on
    [4] => on
)

我需要删除任何id与数组匹配的行。如果我使用程序化PHP,那么效果很好:

$query = "DELETE FROM studio_sessions WHERE id IN('$del_ids')";
$result = mysqli_query($connection, $query);

当我将其转换为Joomla查询时,我无法正确获取IN语法。例如:

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$conditions = array(
    $db->quoteName('id' . ' IN ' . $del_ids) 
);

$query->delete($db->quoteName('#__studio_sessions'));
$query->where($conditions);

$db->setQuery($query);
$result = $db->execute();

我收到此错误:

1054 Unknown column 'id IN 2','4' in 'where clause' SQL=DELETE FROM `vsem6_studio_sessions` WHERE `id IN 2','4` 

看起来我在ID和2周围遗漏了一些单引号,但我无法正确理解语法 - 有人能发现问题吗?

1 个答案:

答案 0 :(得分:2)

$db->quoteName('id' . ' IN ' . $del_ids)

不正确。你把整个长篇大论都视为一个名字,这就是为什么它认为“(' 2',' 4')'是列名。

尝试 $db->quoteName('id') . ' IN (' . $del_ids .')'

你最初的内爆应该是

$del_ids = implode(',', array_keys($_POST['gallery']));

否则,您将获得','作为分隔符,而不是'