Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem w zapytaniu (PDO)
brzoza91
post 20.07.2012, 20:44:39
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 9.05.2012

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


Witam
Mam taką funkcje

  1. public function getAll($table) {
  2. $sel=$this->pdo->prepare("SELECT * FROM :table");
  3. $sel -> bindValue(':table', $table, PDO::PARAM_STR);
  4. $sel -> execute();
  5. $sel->setFetchMode(PDO::FETCH_ASSOC);
  6. foreach ($sel as $row){
  7. $data[]=$row;
  8. }
  9. $sel->closeCursor();
  10.  
  11. return($data);
  12. }


i gdy używam takiego wywołania

  1. getAll('dish');

wyskakuje mi taki błąd. Dlaczego tak się dzieje ? Bo gdy wpiszę na sztywno w zapytaniu
  1. SELECT * FROM dish
to działa.


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dish'' at line 1' in model.php on line 59

Ten post edytował brzoza91 20.07.2012, 20:45:09
Go to the top of the page
+Quote Post
Rysh
post 20.07.2012, 21:00:30
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Dodaje Ci ' ' zapewne podczas bindValue.

BTW, dlaczego nie używasz fetchAll()?


--------------------
Go to the top of the page
+Quote Post
brzoza91
post 20.07.2012, 21:05:40
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 9.05.2012

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


Cytat(Rysh @ 20.07.2012, 22:00:30 ) *
BTW, dlaczego nie używasz fetchAll()?



teraz już używam smile.gif

próbowałem tak, ale dalej taki sam błąd
  1. $table=str_replace("'", '', $table)
Go to the top of the page
+Quote Post
Rysh
post 20.07.2012, 21:20:38
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Kolego zauważ, że PDO przy bindowaniu zamienia ciąg znaków :test na zmienną. Tylko zmienną osadza jeszcze w ' ' czyli co?

Przykład:
Kod
SELECT * FROM tabela WHERE name = :name

zamieni na:
Kod
SELECT * FROM tabela WHERE name = 'zmienna'

zauważ, że do stringa i tak nie dajesz '' jako wartość SQL, ponieważ PDO sam to uczyni.

Czyli to Twój przykład:
Kod
SELECT * FROM :tabela

zamieni na:
Kod
SELECT * FROM 'tabela'


A domyślam się, że phpmyadmin też Ci identyczny błąd w tym przypadku wywali.


--------------------
Go to the top of the page
+Quote Post
brzoza91
post 22.07.2012, 11:58:00
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 9.05.2012

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


kurcze, to już nie wiem jak to rozwiązać
Go to the top of the page
+Quote Post
!*!
post 22.07.2012, 12:15:29
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Nie można bindować nazw tabel.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
markonix
post 22.07.2012, 13:22:07
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(brzoza91 @ 22.07.2012, 12:58:00 ) *
kurcze, to już nie wiem jak to rozwiązać

Użyj tradycyjnego sposobu i wlej nazwę tabeli do zapytania zwykłą zmienną.
I tak funkcja jest pewnie wykonywana tylko przez skrypty, wątpię, żeby jej argument był wysyłany z formularza, a nawet gdyby to po prostu proste wyrażenie regularne na początku dla bezpieczeństwa.

Druga sprawa kopiujesz funkcjonalność metody PDO, która istnieje tj PDOStatement::fetchAll
(ktoś wie jaką dać nazwę aby tag "manual" prawidłowo zalinkował?)

Ten post edytował markonix 22.07.2012, 13:24:36


--------------------
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: 7.07.2025 - 01:47