ralphschindler/Zend_Db-Examples — Issue #1: In example missing - think passing an array is broken?
Author: intellix
Created: 2012-03-09 00:41:39+00:00
State: open

Hey, sorry if this is the wrong place to put this. I've been trying to use IN but I'm thinking that it's not working correctly.

Code:
$idList = array('1', '2', '3', '4', '5');
// Get adapter set before
$adapter = $this->getAdapter();

// Grab squares between
$select = new Select;
$select
->from($this->getTableName())
->join(
'map_types',
'map_types.map_id = map.id',
array('map_types.type')
)
->where->in('map.id', $idList);

$statement = $adapter->createStatement();
$select->prepareStatement($adapter, $statement);

$resultSet = new ResultSet();
$resultSet->setDataSource($statement->execute());

return $resultSet;

I'm thinking that I'm passing in the list of ID's within the IN parameter correctly. The next piece of dump should illustrate:

["sql":protected] => string(141) "SELECT *, `map_types`.`map_types`.`type` FROM `map` INNER JOIN `map_types` ON `map_types`.`map_id` = `map`.`id` WHERE `map`.`id` IN (:where1)"
["isQuery":protected] => NULL
["parameterContainer":protected] => object(Zend\Db\Adapter\ParameterContainer)#479 (2) {
["data":protected] => array(5) {
["where1"] => string(1) "1"
["where2"] => string(1) "2"
["where3"] => string(1) "3"
["where4"] => string(1) "4"
["where5"] => string(1) "5"
}
["errata":protected] => array(5) {
["where1"] => NULL
["where2"] => NULL
["where3"] => NULL
["where4"] => NULL
["where5"] => NULL
}
}

I tried to pass in the imploded array but then it says that it requires an array. Went through the code and I guess this is the bit that only lets it have the first value:

Zend\Db\Sql\Where->prepareStatement()

$wherePart .= vsprintf($part[0], $values);

If I'm doing it wrong then it would be great to see an example of its correct usage :)

Thanks and thanks for making it easier to debug the SQL output!