Wątek przeniesiony 2015-01-28 11:34 z PHP przez dzek69.

Nie działa addslashes(), mysqli_real_escape_string() itp funkcje.

0

Witam, mam nietypowy problem funkcje addslashes(), mysqli_real_escape_string() i tym podobne nie działają u mnie podczas zapisu danych do bazy. Gdy wcześniej wypisuję dane funkcja działa poprawnie. W czym tkwi problem? Więcej zobrazuje poniższy kod:

print $nazwa_firmy = $lacz->real_escape_string($nazwa_firmy); // TUTAJ WYNIK JEST OK  I PRZED ZNAKAMI SPECJALNYMI TYPU ' JEST \
print $nazwa_firmy = addslashes($nazwa_firmy); // TO RÓWNIEŻ DZIAŁA
$wynik1 = $lacz->query("INSERT INTO dane_firmy (Nazwa_firmy) VALUES ('".$nazwa_firmy."')"); 
\\ ZAPIS W BAZIE DANYCH Z POWYŻSZEGO KODU BĘDZIE BEZ \ PRZED ZNAKAMI SPECJALNYMI.

tak również nie działa:

$wynik1 = $lacz->query("INSERT INTO dane_firmy (Nazwa_firmy) VALUES ('".addslashes($nazwa_firmy)."')"); 		

Proszę o pomoc i o wyjaśnienie

1

co znaczy "tak również nie działa"? chwilę wcześniej piszesz że działa

addslashes nie wystarczy - można go ominąć http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

w ogóle nie sklejaj zapytań w ten sposób - to proszenie się o sql injection - gdzieś w końcu możesz zapomnieć użyć real_escape_string

użyj jakiejś biblioteki typu pdo i przekazuj parametry w sposób do tego zaprojektowany

0

ok, czyli mam użyć PDO i bindValue jak dobrze czytam, żeby zabezpieczyć stronę przed sql injection?

Dziękuję za pomoc.

0

Właśnie na tym polegają te slashe, że one się NIE zapisują do bazy. One są tylko potrzebne na etapie "rozumowania" bazy danych gdzie zaczyna się ciąg znaków, a gdzie kończy.

0

Wszyscy ciągle mówią pdo i pdo, sorka ale według testów pdo i bindvalue jest o kilka % wolniejsze niż czyste zapytanie i jak dla mnie jest to wystarczający argument by nie stosować tego za każdym razem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1