Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework]Zend_Db_Select where
nospor
post 19.02.2009, 09:36:17
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Chce uzyskac zapytanie (przykład z manuala):
  1. <?php
  2. //   SELECT product_id, product_name, price
  3. //   FROM "products"
  4. //   WHERE (price < 100.00 OR price > 500.00)
  5. //     AND (product_name = 'Apple')
  6.  
  7. $minimumPrice = 100;
  8. $maximumPrice = 500;
  9. $prod = 'Apple';
  10.  
  11. $select = $db->select()
  12.             ->from('products',
  13.                    array('product_id', 'product_name', 'price'))
  14.             ->where("price < $minimumPrice OR price > $maximumPrice")
  15.             ->where('product_name = ?', $prod);
  16. ?>

zastosowali: ->where("price < $minimumPrice OR price > $maximumPrice")
Chcialbym jednak uzyc bindowania i zrobic tak
  1. <?php
  2. ->where("price < ? OR price > ?", $minimumPrice, $maximumPrice);
  3. ?>

Oczywiscie to nie zadziala, bo where() przyjmuje tylko jedą wartosc do bindowania. W kodzie ani w dokumentacji nie znalazlem tego, a nie chce mi sie wierzyc by nie pomysleli o tym przy where()... Zapodanie tablicy wartosci tez nie dziala.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ziqzaq
post 19.02.2009, 09:48:30
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


Cytat
If you need to combine terms together using OR, use the orWhere() method. This method is used in the same way as the where() method, except that the term specified is preceded by OR, instead of AND.

Edit: źródło

Ten post edytował ziqzaq 19.02.2009, 09:49:21
Go to the top of the page
+Quote Post
nospor
post 19.02.2009, 09:50:29
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




a przeczytaj jeszcze raz przyklad z pierwszego posta i porownaj z tym co robi orWhere winksmiley.jpg

ps: moj przyklad jest pod tym co ty mi zacytowales winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ziqzaq
post 19.02.2009, 09:51:13
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


Mea kulpa smile.gif
Go to the top of the page
+Quote Post
wolditm
post 19.02.2009, 13:13:30
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 20.07.2005

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $select = $db->select()
  3.            ->from('products', array('product_id', 'product_name', 'price'))
  4.            ->where("price < :minimumPrice OR price > :maximumPrice", array('minimumPrice' => $minimumPrice, 'maximumPrice' => $maximumPrice))
  5.            ->where('product_name = ?', $prod);
  6. ?>


?


--------------------
Wspomnienia
Go to the top of the page
+Quote Post
nospor
post 19.02.2009, 13:36:02
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




rozumiem ze to zwykły strzał? oczywiscie nie działa

" Invalid parameter number: no parameters were bound "


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
konys
post 20.02.2009, 12:50:56
Post #7





Grupa: Zarejestrowani
Postów: 100
Pomógł: 7
Dołączył: 5.11.2005

Ostrzeżenie: (0%)
-----


Cytat
nie chce mi sie wierzyc by nie pomysleli o tym przy where()...

Tak na szybko przejrzalem kod i wychodzi, ze Zend_Db_Select::where wywoluje Zend_Db_Select::_where gdzie umieszczony zostal warunek:
Kod
        if ($value !== null) {
            $condition = $this->_adapter->quoteInto($condition, $value, $type);
        }

Z kolei Zend_Db_Adapter_Abstract::quoteInto($text, $value, $type, $count) ma parametr $count
Cytat
@param integer $count OPTIONAL count of placeholders to replace

Z tego co rozumiem, gdyby w _where umiescic cos podobnego do:
Kod
        if ($value !== null) {
            $count = is_array($value) ? count($value) : null;
            $condition = $this->_adapter->quoteInto($condition, $value, $type, $count);
        }

to mialoby szanse zadzialac. Tylko taki strzal smile.gif
Go to the top of the page
+Quote Post
nospor
post 20.02.2009, 13:01:58
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Hehe, no tak, ale nie będę przecież modyfikował im frameworka. Przyjdzie nowa wersja i bede musial pamietac ze jakies zmiany robilem i ja nanosic na nową wersje


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bigZbig
post 20.02.2009, 13:22:39
Post #9





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Zawsze możesz spróbować czerpiąc z przykładu http://zendframework.com/manual/en/zend.db...tement.creating

a konkretnie

  1. <?php
  2. $select = $db->select()
  3.           ->from('products', array('product_id', 'product_name', 'price'))
  4.           ->where("price < :minimumPrice OR price > :maximumPrice")
  5.           ->where('product_name = :prodName');
  6. $stmt = new Zend_Db_Statement_Mysqli($db, (string) $select);
  7. $stmt->execute(array(':minimumPrice' => $minimumPrice, ':maximumPrice' => $maximumPrice, ':prodName' => $prod));
  8. $stmt->fetchAll();
  9. ?>


Pisałem na sucho więc nie wiem czy zadziała


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
nospor
post 20.02.2009, 13:32:00
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jest to jakaś myśl.
Niestety uzywam tego $select do Zend_Paginator i coś czuję ze podane przez Ciebie rozwiązanie będzie się z tym gryzło.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:48