$conditions[] = $this->getConnection()
->quoteInto('cat_index.category_id IN (?)', "{$filters[category_id]},{$Catids}");
引用将我的值括在引号中。我想在没有quoteInto方法的情况下使用相同的方法。所以基本上,我想知道在没有添加引号的情况下使用相同的方法
答案 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虽然可以很好地使用带引号的整数。