$conditions[] = $this->getConnection()
->quoteInto('cat_index.category_id IN (?)', "{$filters[category_id]},{$Catids}");
quote into 将我的值用引号括起来。我想使用相同的方法而不使用 quoteInto 方法。所以基本上,我想知道什么方法可以在不添加引号的情况下执行相同的操作
为了使用
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);
}
问题是我正在解析字符串中的值,因此 $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);
}
现在传递的值被视为整数,而不是用引号引起来
假设
$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 与带引号的整数配合得很好。