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' ) > > >> > > > >> > > >> > > > > > > > >
