使用Zend_Db_Adapter类的fetchCol方法进行选择时,查询无法正常工作,例如:(其中$ db是对DB_Adapter的引用)
$ids = array(1,2,3,4);
$idString = implode(",", $ids);
$query = "SELECT id FROM some_table WHERE id IN (?)";
$result = $db->fetchCol($query, $idString);
你希望这会返回一个与idString匹配的id数组,但它只返回一个带有单个项的数组 - 第一个匹配的id。如果我像这样重写它就没有问题:
$ids = array(1,2,3,4);
$idString = implode(",", $ids);
$query = "SELECT id FROM some_table WHERE id IN ($idString)";
$result = $db->fetchCol($query);
预期的行为或ZF中的错误?我遇到的主要问题是跟踪不是一个明显的错误,没有功能被破坏我只有更少的结果。
答案 0 :(得分:3)
ZF很聪明,知道如何使用数组,所以你需要的只是传入数组本身,跳过内爆:
$query = "SELECT id FROM some_table WHERE id IN (?)";
$result = $db->fetchCol($query, array($ids));
使用您的代码,因为您传入的字符串会被引用,因此您运行的查询最终会是这样的:
SELECT id FROM some_table WHERE id IN ('1, 2, 3, 4')
答案 1 :(得分:1)
尝试:
$query = "SELECT id FROM some_table WHERE id IN (?)";
$result = $db->fetchAll($query, $idString);
或强>
为'sometable'创建一个DbTable
class SomeTable extends Zend_Db_Table_Abstract {
protected $_name = 'sometable';
}
像这样获取结果
$table = new SomeTable();
$select = $table->select();
$select->where('id IN (?)', $idString );
$result = $table->fetchAll( $select );
请参阅以下POST:
答案 2 :(得分:0)
试试这个:
$ids = array( 1, 2, 3 );
$db->fetchCol( 'SELECT id FROM some_table WHERE id IN (' . str_repeat( '?,', sizeof( $ids )-1 ) . '?)', $ids );
你可以这样做:
$db->fetchCol( 'SELECT id FROM some_table WHERE id IN (' . $db->quoteInto( '?', $ids ) . ')' );