替代为Pdo查询的quoteInto方法

时间:2013-09-04 12:49:23

标签: mysql magento zend-framework pdo

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

引用将我的值括在引号中。我想在没有quoteInto方法的情况下使用相同的方法。所以基本上,我想知道在没有添加引号的情况下使用相同的方法

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
        }

现在传递的值被视为整数,而不是包含在引号中

答案 2 :(得分:-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虽然可以很好地使用带引号的整数。