替代 Pdo 查询的 quoteInto 方法

问题描述 投票:0回答:3
        $conditions[] = $this->getConnection()
            ->quoteInto('cat_index.category_id IN (?)', "{$filters[category_id]},{$Catids}");

quote into 将我的值用引号括起来。我想使用相同的方法而不使用 quoteInto 方法。所以基本上,我想知道什么方法可以在不添加引号的情况下执行相同的操作

php mysql magento pdo zend-framework
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);
}

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);
        }

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


-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 与带引号的整数配合得很好。

© www.soinside.com 2019 - 2024. All rights reserved.