Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ucieczki w zapytaniach sql (poprzez PDO)
jolam
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


Jak mogłabym zrobić ucieczkę od niedozwolonych znaków? Bo robię UPDATE do bazy i niektóre stringi zawierają jakieś sekwencje znaków, które skutecznie powodują błędy zapytania. Czyli muszę jakoś obejść te błędne fragmenty. Jak to zrobić? Dla PDO znalazłam quote ale nie bardzo chce mi działać, to znaczy nie wiem jak zadziałać tą funkcją quote na zmienną np $zmm tak, żeby potem mogła zrobić UPDATE i jak wartość podac właśnie $zmm.

Kolejna sprawa to jak ja odkręcę działanie tej lub innej funkcji? Bo w bazie muszę mieć w jakiś sposób przetworzone teksty właśnie z myśla o SQL. Ale jak bym chciała je pobrać z bazy i wyświetlić, albo edytować to pewnie by mi przeszkadzały te apostrofy (chyba apostrofy są wstawiane w tym uciekaniu w sql) I nie wiem jak to odkręcić.

pozdrawiam i bardzo proszę o pomoc Jola
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://pl2.php.net/manual/pl/pdostatement.bindvalue.php
Go to the top of the page
+Quote Post
jolam
post
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


Już zabieram się do rozgryzania tego, rozumiem, że ta funkcja przerobie mój tekst do takiej postaci, żeby dało się go dodać do bazy? Czy można tej funkcji używać bez prepare, bo tego jeszcze nie umiem? A ja potrzebuje tylko na zmienną z tekstem nią zadziałać i potem dodać go do bazy.

Jola
Go to the top of the page
+Quote Post
Quantum
post
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


musi być z prepare, czego tu sie uczyć ? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
jolam
post
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


Nie wszystko na raz, jednocześnie! Nie dam sobie rady. Próbuję użyć tego bindvalue ale mi nie wychodzi. Czy jest inny sposób na poprawieni tekstu w zmiennej? Czy może chodzi o nie poprawianie tekstu w zmiennej ale tylko o poprawianie go na chwile w zapytaniu? Tak czy siak to nie działa mi (IMG:style_emoticons/default/sad.gif) (IMG:style_emoticons/default/sadsmiley02.gif)

Jola
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Przecież pisze jak wół w przykładzie co masz zrobić. Manual sam za ciebie tego nie napisze. Pokaż jak robisz.
Go to the top of the page
+Quote Post
Quantum
post
Post #7





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


  1. $userid = 123;
  2. $content = 'zawartosc komentarza';
  3.  
  4. $stmt = $dbh->prepare('insert into comments (userid, content) values (?,?)');
  5. $stmt->bindParam(1, $userid, PDO::PARAM_INT);
  6. $stmt->bindParam(2, $content, PDO::PARAM_STR);
  7. $stmt->execute();
  8.  
  9. można i tak:
  10.  
  11. $stmt = $dbh->prepare('insert into comments (userid, content) values (:userid,:content)');
  12. $stmt->bindValue(':userid', $userid, PDO::PARAM_INT);
  13. $stmt->bindValue(':content', $content, PDO::PARAM_STR);
  14. $stmt->execute();
  15.  


(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/blinksmiley.gif) a i uprzedzę następne pytanie bindParam działa tylko ze zmiennymi, gdyż używa referencji, a do bindValue możesz dawać i zmienne i wartości, także używaj tego co będzie Ci w danym momencie potrzebne (IMG:style_emoticons/default/winksmiley.jpg) mam nadzieję, że coś wytłumaczyłem, a jak nie to pozostaje jeszcze książka, google, manual.. (IMG:style_emoticons/default/laugh.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




@sniffer32 a czym sie rozni podany przez ciebie kod od tego ktory tu już padł w linku do manualu?
Go to the top of the page
+Quote Post
jolam
post
Post #9





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


Próbowałam jeszcze z guote, bo wydawało mi się prostsze:

$aa = $dbh -> quote( $text );
echo $aa;
$sql1233 = "
UPDATE tab
SET opis_pl = '$aa'
WHERE id = '$id'
";
$dbh -> exec( $sql1233 );

ale nie wyszło, bład się pojawił (IMG:style_emoticons/default/sad.gif)

Ale muszę powiedzieć: sniffer32 jesteś kochany! to z bindvalue DZIAŁA!
Nawet nie wiesz jak bardzo się cieszę. Trochę to zagmatwane ale działa a to najważniejsze.
Czy mógłbyś zerknąć również na ten kod z quote? Czemu on nie działa? Bo nie mogę ukryć, że jak na razie to całe prepare i bindvalue troszkę mnie przytłacza i ilością kodu i w ogóle. Może jest jest jeszcze jakieś inne rozwiązanie?




pozdrawiam najserdeczniej
Jola
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Cytat
Ale muszę powiedzieć: sniffer32 jesteś kochany! to z bindvalue DZIAŁA!

przeciez dokladnie to samo mialas w linku co dostalas na samym początku. przykladaj uwagę do tego co ci ludzie dają, bo w przeciwnym wypadku moderatorzy podejmą stosowne kroki*


*pójdą sobie na piwo.... (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
jolam
post
Post #11





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


nospor teraz to i ja taka mądra jestem (IMG:style_emoticons/default/smile.gif) Ale jak wpatrywałam się w ten manual to ni w ząb nie umiałam sobie tego przerobić (IMG:style_emoticons/default/sad.gif) Teraz się zastanawiam jak przerobić ten sposób z quotes żeby zadziałał. Bo to nie daje mi spokoju. Gdzieś mam błąd ale nie potrafiłam go znaleźć. Może widzisz co powinnam poprawić?

pozdrawiam Jola
Go to the top of the page
+Quote Post
Quantum
post
Post #12





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


Cytat(jolam)
ale nie wyszło, bład się pojawił


to wstaw jego zawartość tutaj, nie mamy parserów w głowach (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #13





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A $id skąd masz? Z czytanki?
wyswietl sobie zapytanie i wklej tutaj to bedziesz wiedziała jaki jest błąd.
Go to the top of the page
+Quote Post
jolam
post
Post #14





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


Taki mam błąd (wycięłam ścieżkę do skryptu bo była bardzo długa):

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1 near "jest": syntax error' in TUTAJ_SCIEZKA_DO_SKRYPU:245 Stack trace: #0 TUTAJ_SCIEZKA_DO_SKRYPU(245): PDO->exec('?(IMG:style_emoticons/default/questionmark.gif) ?UPDATE tab..') #1 {main} thrown in TUTAJ_SCIEZKA_DO_SKRYPU on line 245

A $id mam z wcześniejszej cześć skryptu. I to akurat jest na pewno dobrze. Problem jest z zawartością tego co jest w $aa. Bo jeśli $aa='abc'; to wtedy jest ok. Macie jakiś pomysł co tu może być źle?

pozdrawiam serdecznie Jola
Go to the top of the page
+Quote Post
wookieb
post
Post #15





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A o co my prosiliśmy? O wyświetlenie zapytania czyli twojego $sql1233
Go to the top of the page
+Quote Post
jolam
post
Post #16





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


wookieb ale w zapytaniu będzie cała treść artykułu, czyli to będzie bardzo długie. Chyba działanie funkcji nie powinno zależeć od treści artykułu?

Zmieniłam treść wstawiając jedno zdanie tylko. Teraz zmienna $text='Drzeworyt jest jedną z technik druku wypukłego.';
wyświetlenie zapytania sql :
UPDATE tab SET opis_pl = ''Drzeworyt jest jedną z technik druku wypukłego.'' WHERE id = '1000'

błąd jest tak
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1 near "Drzeworyt": syntax error' in TUTAJ_SCIEZKA_DO_SKRYPU:247 Stack trace: #0 TUTAJ_SCIEZKA_DO_SKRYPU(247): PDO->exec('?(IMG:style_emoticons/default/questionmark.gif) ?UPDATE tab...') #1 {main} thrown in TUTAJ_SCIEZKA_DO_SKRYPU on line 247

czy teraz będziesz potrafił mi pomóc?

pozdrawiam serdecznie Jola

Go to the top of the page
+Quote Post
nospor
post
Post #17





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




nie: SET opis_pl = '$aa'
a: SET opis_pl = $aa
Go to the top of the page
+Quote Post
jolam
post
Post #18





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


Za raz sprawdzę. Ale wydaje mi się to dziwne, bo jesli mam zapytanie
"
UPDATE tab
SET opis_pl = '$aa'
WHERE id = '$id'
"
to czemu raz zmienne mają być w apostrofach ('$id') a raz nie ($aa). Na czym to polega, od czego zależy? Może powinnam jakoś inaczej używać cudzysłowów i apostrofów w zapytaniach? Wytłumaczysz mi to, proszę?

pozdrawiam Jola

Zadziałało! Ale teraz to już zgłupiałam zupełnie! O co chodzi z tym brakiem apostrofów. Domyślam się, że funkcja quoted dodaje właśnie owe apostrofy, co może powodować te kłopoty, z którymi się zmagałam. Czy zamiast tego gdybym miała
'
UPDATE tab
SET opis_pl = "$aa"
WHERE id = "$id"
'
to byłoby dobrze?
Go to the top of the page
+Quote Post
nospor
post
Post #19





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




Cytat
Domyślam się, że funkcja quoted dodaje właśnie owe apostrofy
nie ma co sie domyslic. to jest czarno na bialym napisane w manualu przy opisie funkcji quote.

Cytat
Czy zamiast tego gdybym miała
'
UPDATE tab
SET opis_pl = "$aa"
WHERE id = "$id"
'
to byłoby dobrze?
Nie. wowczas wlozysz tekst, ktory bedzie mial w sobie apostrofy. A chyba chcesz wlozysz tekst bez apostrofow
Go to the top of the page
+Quote Post
jolam
post
Post #20





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

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


No masz racje chciałabym włożyć tekst bez apostrofów, żebym później nie musiała ich usuwać. A czy da się jakoś tak używać cudzysłowów i apostrofów, żeby nie trzeba było z okazji użycia funkcji quote usuwać apostrofy przy zmiennych w zapytaniu sql? Chodzi mi o takie bardziej uniwersalne rozwiązanie. Proszę poradź mi.

pozdrawiam serdecznie Jola
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 13:24