Please ignore the new suggested name. It is a part of the where clause [where()/orWhere()] and so, in() would be ideal:
$select->where( $select->in( ... )); $select->orWhere( $select->in( ... )); Thanks On 11/21/07, Shekar C Reddy <[EMAIL PROTECTED]> wrote: > > I guess the new method should be named inWhere(). > > > > > On 11/21/07, Shekar C Reddy <[EMAIL PROTECTED]> wrote: > > > > Thomas, > > > > I encourage you to test the where() method with v1.0.2 and see the > > results - it generates SQL imploding all the array values into a single > > placeholder as expected. The documentation used to have this usage listed > > but now it seems to have been removed. The code snipped you gave generated > > the following SQL with 1.0.2: > > > > price IN (2, 10, 14, 20, 2, 10, 14, 20, 2, 10, 14, 20, 2, 10, 14, 20) > > > > and the following SQL with the current SVN: > > > > price IN (2, 10, 14, 20) > > > > indicating they are generating different SQL. Enhancements are welcome > > but I thought they would be backwards compatible - I had to revert to > > 1.0.2 :( The old code used to be generic and would apply to both - a > > normal where clause with a boolean operator or an IN operator because it > > used to implode the array into a list of values to replace a single > > placeholder but the new enhancements need IN-operators handled differently > > using arrays and multiple placeholders. I guess having a separate in() > > function for such expressions is more ideal and desired at the component > > level. > > > > Here is the issue to get started: > > > > http://framework.zend.com/issues/browse/ZF-2223 > > > > > > Keep up the good work! > > > > > > > > > > > > On 11/21/07, Thomas Weidner <[EMAIL PROTECTED] > wrote: > > > > > > Shekar, > > > > > > actually the documentation does not mention this usage. > > > > > > And there are also no testcases. > > > All testcases have approved before I did my commit. > > > > > > Actually, giving an array as input would result in each single > > > placeholder > > > to be replaced. > > > > > > where("price > ? and price <= ?", array(2, 10)); > > > becomes > > > "where (price > 2 and price <= 10)" > > > > > > This is the reason why the automatic imploding does not work anymore. > > > > > > Principially there are several ways: > > > You could for example do the following: > > > > > > $array = array(2,10,14,20); > > > $addwhere = ""; > > > for($i = 1; $i < count($array); ++$i) { > > > $addwhere .= ", ?"; > > > } > > > > > > $where = "price IN (?". $addwhere.")"; > > > $db->where($where, $array); > > > > > > In my eyes it would be better to have a own "IN" function avaiable for > > > such > > > clauses. > > > I am actually also working on a BEWTEEN function which adds between to > > > be > > > avaiable. > > > > > > So eighter you use a the codesnippet I gave you or you add a new issue > > > for > > > creating a "IN" function which handles the IN within the where clause. > > > > > > Greetings > > > Thomas > > > I18N Team Leader > > > > > > > > > ----- Original Message ----- > > > From: "Shekar C Reddy" <[EMAIL PROTECTED]> > > > To: "Thomas Weidner" < [EMAIL PROTECTED] > > > > Cc: "Zend Framework General" < [email protected]> > > > Sent: Wednesday, November 21, 2007 8:28 AM > > > Subject: Re: [fw-general] Zend_Db_Select::where() malfunction > > > > > > > > > > Thomas, > > > > > > > > This feature of imploding an array of values into a single > > > place-holder > > > > was > > > > there from the the days of ZF v0.1.5 or earlier. My code was working > > > fine > > > > all these days. There were code examples in the documentation that > > > showed > > > > how an array would be imploded into the SQL using where(). I even > > > created > > > > an > > > > issue in the past to avoid quoting numeric values in the resulting > > > SQL's > > > > array (look for the issue that reads: "quote() quotes numeric > > > values" a > > > > bug > > > > that was attributed to PDO). I just did a diff on Select.php between > > > the > > > > current SVN and 1.0.2 and noticed that where() method actually > > > invokes and > > > > delegates to _where() in the current SVN whereas there is no > > > _where() > > > > method > > > > in 1.0.2. My same code with ZF 1.0.2 works fine as expected but not > > > with > > > > the > > > > latest SVN update. > > > > > > > > If this is not supported, what's the syntax for the expected SQL? I > > > need > > > > to > > > > generate a where clause as under: > > > > > > > > WHERE status IN ( 'A', 'I' ) > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > On 11/20/07, Thomas Weidner < [EMAIL PROTECTED]> wrote: > > > >> > > > >> Hy Shekar, > > > >> > > > >> this is not supported, and it was not supported in the past. > > > >> Because ? is a placeholder for only ONE variable. > > > >> And you gave two within your array :-) > > > >> > > > >> Actually I am working on a array integration which adds several new > > > >> features > > > >> to where. > > > >> But the behaviour you are expecting would break things with other > > > new > > > >> where > > > >> features. > > > >> > > > >> For now it is not planned to support such a use case. > > > >> > > > >> Btw: Before my improvement several days ago even the first variable > > > would > > > >> not have been integrated. > > > >> That the array value is inserted for a placeholder is also one of > > > the new > > > >> features :-) > > > >> > > > >> Greetings > > > >> Thomas > > > >> I18N Team Leader > > > >> > > > >> ----- Original Message ----- > > > >> From: "Shekar C Reddy" <[EMAIL PROTECTED]> > > > >> To: "Zend Framework General" < [email protected] > > > > >> Sent: Tuesday, November 20, 2007 10:55 AM > > > >> Subject: [fw-general] Zend_Db_Select::where() malfunction > > > >> > > > >> > > > >> > Bill, > > > >> > > > > >> > I downloaded the latest SVN today and noticed a strange behavior > > > with > > > >> the > > > >> > select component: > > > >> > > > > >> > $select->where( 'status IN ( ? )', array( 'A', 'I' )); > > > >> > > > > >> > > > > >> > SQL generated: > > > >> > > > > >> > WHERE status IN ( 'A' ) > > > >> > > > > >> > > > > >> > SQL expected: > > > >> > > > > >> > WHERE status IN ( 'A', 'I' ) > > > >> > > > > >> > > > >> > > > > > > > > > > > > >
