0
        $conditions[] = $this->getConnection()
            ->quoteInto('cat_index.category_id IN (?)', "{$filters[category_id]},{$Catids}");

quote into 将我的值包含在引号中。我想在没有 quoteInto 方法的情况下使用相同的方法。所以基本上,我想知道什么方法在不加引号的情况下做同样的事情

4

3 回答 3

1

为了使用带有 的参数化查询in,您必须指定带有?(或某个值)的参数数量,甚至带有in

cat_index.category_id IN (?,?)

您可以使用一组参数来执行此操作。

// array_merge Catids instead? is it an array?
$args = array($filters["category_id"], $Catids);
$query = "cat_index.category_id IN (" .
    implode(',', array_fill(0, count($args), '?'))
    . ")";
foreach ($args as $arg) {
    $connection->quoteInto($query, $arg);
}
于 2013-09-04T12:58:47.253 回答
0

问题是我正在解析字符串中的值,因此 $Cateids 被视为字符串而不是整数。我做了以下

    $values = $values ? array_filter(explode('_', $values)) : array();
    $i = 0;
    foreach($values as $v) {
        $values[$i] = intval($v);
    }

其次是

        $query = "cat_index.category_id IN (" .
            implode(',', array_fill(0, count($values), "?")). ")";
        foreach($values as $v) {
            $conditions[] = $this->getConnection()->quoteInto($query,$v);
        }

现在传递的值被视为整数而不是用引号括起来

于 2013-09-04T13:53:49.267 回答
-1

假设$filters['category_id']不是一个数组,而是$Catids,你可能想要:

->quoteInto('cat_index.category_id IN (?)', array_merge(array($filters['category_id']), $Catids));

编辑:你也可以这样做:

->quoteInto('cat_index.category_id IN (?)', array_merge(array($filters['category_id']), $Catids), 'INTEGER');

如果您确定这些值是数字 - 这将确保您不会在各个值周围得到引号。MySQL 可以很好地处理带引号的整数。

于 2013-09-04T13:07:18.470 回答