Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem SQL(nie zwraca odpowiedzi)
Forum PHP.pl > Forum > PHP
Ultear
Witam,

Mam problem z wyciągnięciem odpowiednich danych z bazy danych, otóż mam metodę klasy Database, która nazywa się select, a wygląda następująco:

  1. public function select($query_string, $values = array(), $count = null){
  2. ksort($values);
  3. $stmt = $this->prepare($query_string);
  4. foreach($values as $key => $value){
  5. $stmt->bindValue(':'.$key, $value);
  6. }
  7.  
  8.  
  9.  
  10. $stmt->execute();
  11. if($count === true){
  12. return array(
  13. 'count' => $stmt->rowCount(),
  14. 'data' => $stmt->fetchAll(PDO::FETCH_ASSOC)
  15. );
  16. }
  17. print_r($stmt); //Cele debugowania
  18. return $stmt->fetchAll(PDO::FETCH_ASSOC);
  19. }


No i metodę getProducts umieszczoną w jednym z modeli:

  1. public function getProducts($sortBy = null, $order = null, $pageDelimiter = null, $perPage = null, $where = null){
  2.  
  3. if($sortBy != null && $pageDelimiter != null && $where != null){
  4. $result = $this->db->select('SELECT * FROM shop_items ORDER BY :sortBy :order WHERE :whereString LIMIT :pageDelimiter , :perPage', array('sortBy' => $sortBy, 'order' => $order, 'whereString' => $where, 'pageDelimiter' => $pageDelimiter, 'perPage' => $perPage));
  5. }
  6. elseif($sortBy != null && $pageDelimiter != null){
  7.  
  8. $result = $this->db->select('SELECT * FROM shop_items ORDER BY :sortBy :order LIMIT :pageDelimiter , :perPage', array('sortBy' => $sortBy, 'order' => $order, 'pageDelimiter' => $pageDelimiter, 'perPage' => $perPage));
  9. }
  10. elseif($sortBy != null){
  11. $result = $this->db->select('SELECT * FROM shop_items ORDER BY :sortBy :order', array('sortBy' => $sortBy, 'order' => $order));
  12. }
  13. elseif($sortBy == null && $pageDelimiter == null){
  14. $result = $this->db->select('SELECT * FROM shop_items');
  15. }
  16.  
  17. return $result;
  18.  
  19.  
  20.  
  21.  
  22. }


Z tego print_r($result) otrzymuję:

  1. PDOStatement Object ( [queryString] => SELECT * FROM shop_items ORDER BY :sortBy :order LIMIT :pageDelimiter , :perPage )
  2. PDOStatement Object ( [queryString] => SELECT * FROM shop_items ORDER BY :sortBy :order LIMIT :pageDelimiter , :perPage )
  3. PDOStatement Object ( [queryString] => SELECT * FROM shop_items ORDER BY :sortBy :order WHERE :whereString LIMIT :pageDelimiter , :perPage )


Czyli wszystko tak jak potrzebuję, jednak po przeskanowaniu zmiennej $result, która przetrzymuje wynik działania metody otrzymuję:



3 puste tablice.

Gdy skopiuję zapytanie wygenerowane przez metodę i użyję ręcznie odstawiając dane, wszystko ładnie działa i nie mogę znaleźć problemu.

Proszę o pomoc smile.gif

@EDIT

Cytat
Z tego print_r($result) otrzymuję:


Miałem na myśli print_r($stmt);
Damonsson
Podejrzyj (włącz logi w MySQL np.) co jest dokładnie wysyłane do MySQL, żebyś dostał konkretne zapytanie, z podstawionymi już danymi zamiast :sortBy itd. Podejrzewam, ze tam jest problem.
Ultear
Staram się jakoś dojść do tych logów, alen ie mogę znaleźć

ok, no to znalazłem odpowiedź:

Mój skrypt dodaje do wszystkich bindowanych wartości '', także więc do typu sortowania DESC/ASC oraz do Limitu tj. cyferek od niego
Damonsson
Przekazuj liczby jako (int), sprawdzaj czy zmienna to (int) i binduj z parametrem PDO::PARAM_INT

coś w stylu:


  1. foreach($values as $key => $value){
  2. if(is_int($value)) {
  3. $param = PDO::PARAM_INT
  4. } else {
  5. $param = PDO::PARAM_STR
  6. }
  7. $stmt->bindValue(':'.$key, $value, $param);
  8. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.