Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][PDO] problem z bindowaniem
Spawnm
post 7.10.2009, 14:28:04
Post #1





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




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
Go to the top of the page
+Quote Post
nospor
post 7.10.2009, 14:36:54
Post #2





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




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?


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

"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: 16.07.2025 - 03:55