Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PDO] problem z bindowaniem
Forum PHP.pl > Forum > Przedszkole
Spawnm
Witam,
do tej pory bawiłem się zwykłym mysql_* i gotowymi klasami, jednak ostatnio naszło mnie na przesiadkę na pdo... znać znałem w teorii a chciałem w praktyce. I tak zacząłem pisać klasę do db z metodami select(), insert update itp.
Początkowo działało ładnie ale pojawił się problem przy bindowaniu , mianowicie:

Ten kod mi działa:
  1. public function insert(array $arg){
  2. foreach($this->structure as $key){
  3. if( isset($arg[$key]) ){
  4. $up[]=" `$key` = :$key ";
  5. }
  6. }
  7. $up=implode(', ',$up);
  8. $this->sql="INSERT {$this->name} SET $up";
  9. $this->prepare=self::$db->prepare($this->sql);
  10. if($arg){ $this->bind_t($arg); }
  11. $this->prepare->execute();
  12. }
  13. #####
  14. private function bind_t(array $asc){
  15. foreach($asc as $key => $val){
  16. if(in_array($key,$this->structure)){
  17. if(!is_numeric($val)){
  18. $this->prepare -> bindValue(':'.$key, $val, PDO::PARAM_STR);
  19. }else{
  20. $this->prepare -> bindValue(':'.$key, $val, PDO::PARAM_INT);
  21. }
  22. }
  23. }
  24. }

Wszystko ładnie się binduje i dodaje.

Ale ten przykładowy kod już nie:
  1. $order=' id desc ';
  2. $this->sql="select * from news order by :order ";
  3. $prepare=self::$db->prepare($this->sql);
  4. $prepare->bindParam(':order',$order,PDO::PARAM_STR);
  5. $prepare->execute();
  6. return $prepare->fetchAll();


Ten też:
  1. $this->sql="select * from news order by :order ";
  2. $prepare=self::$db->prepare($this->sql);
  3. $prepare->execute(array(':order'=>' id desc '));
  4. return $prepare->fetchAll();


Pytanie: czemu nie działa? Co zrobić aby działało ?
(zapytanie się wykonuje ale olewa order by id desc)

Dodam że mam php5.2.9
nospor
bindowanie sluzy bindowaniu wartosci kolumn anie bindowaniu stringów będących częścią sql

"id desc" to czesc mysql a nie wartosc pola i tego sie nie binduje

w wyniku tego bindowania twoje zapytanie bedzie wygladac tak:
select * from news order by 'id desc'

rozumiesz blad?
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.