Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zmienna w poleceniu PDO
piekarz
post 2.02.2017, 20:28:34
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 23.08.2011

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


Witam.
W poniższym zapytaniu do bazy MSQLi używam PDO. O ile w poniższym zapytaniu nie ma problemu i wszystko działa jak należy, to takie proste zapytanie "query" jest potencjalnie niebezpieczne.
  1. public function addVote($type,$artId){
  2. $vote = $this->db->query("UPDATE votes SET $type=$type+1 WHERE art_id=$artId");
  3. }


Chciałem użyć bindowania danych jak poniżej ale niestety PDO sypie błędem.
  1. public function addVote($type,$artId){
  2. $vote = $this->db->prepare("UPDATE votes SET :col=:type+1 WHERE art_id=:artId");
  3. $vote->bindValue(':type', $type, PDO::PARAM_STR);
  4. $vote->bindValue(':col', $type, PDO::PARAM_STR);
  5. $vote->bindValue(':artId', $artId, PDO::PARAM_INT);
  6. $vote->execute();
  7. }


Czy ktoś wie może jak napisać update z inkrementacją?

A po drugie. Może nie ma tu sensu stosować bindowania jeśli obie te zmienne nie pochodzą z formularza tylko z atrybutów HTML?

Dziękuję

Go to the top of the page
+Quote Post
trueblue
post 2.02.2017, 20:46:25
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie można bindować nazw kolumn i tabel.


--------------------
Go to the top of the page
+Quote Post
piekarz
post 4.02.2017, 15:34:40
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 23.08.2011

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


Sprawdziłem jeszcze raz i tym razem nazwę kolumny zapisałem jako zmienną. I też nie działa. Więc czy można to polecenie z inkrementacją zapisać inaczej?

  1. public function addVote($type,$artId){
  2. $vote = $this->db->prepare("UPDATE votes SET $type=:type+1 WHERE art_id=:artId");
  3. $vote->bindValue(':type', $type, PDO::PARAM_STR);
  4. $vote->bindValue(':col', $type, PDO::PARAM_STR);
  5. $vote->bindValue(':artId', $artId, PDO::PARAM_INT);
  6. $vote->execute();
  7. }
Go to the top of the page
+Quote Post
trueblue
post 4.02.2017, 15:42:20
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A drugie type?


--------------------
Go to the top of the page
+Quote Post
woxala123
post 4.02.2017, 17:15:14
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Ha ha- to jest dopiero bindowanie(lepsze od mojego). oneeyedsmiley02.png
Go to the top of the page
+Quote Post
piekarz
post 4.02.2017, 17:45:58
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 23.08.2011

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


Cytat(trueblue @ 4.02.2017, 16:42:20 ) *
A drugie type?

No tak. closedeyes.gif To ponowie pytanie drugie.
Czy jest ryzyko sql injection jeśli zmienne nie pochodzą z formularza tylko z atrybutów HTML?

Cytat(woxala123 @ 4.02.2017, 18:15:14 ) *
Ha ha- to jest dopiero bindowanie(lepsze od mojego). oneeyedsmiley02.png


Rozwiń temat albo daruj sobie takie odpowiedzi.
Go to the top of the page
+Quote Post
trueblue
post 4.02.2017, 18:06:09
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


http://stackoverflow.com/a/182353


--------------------
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: 18.07.2025 - 06:38