Skocz do zawartości

Magic quotes i Mysql


Tomahawk

Rekomendowane odpowiedzi

Witam!

Ostatnio zauważyłem że w mojej aplikacji jakieś błędy się pojawiły i ogólny zamęt a to wszystko za sprawą magicznych cudzysłowów. Przekopałem wszystko i naprawiłe. Doszłem też to pewnych wniosków i zauważyłem że magic quotes inaczej działa niż mi się zawsze wydawało.

Otóż zawsze myślałem że jak mam stringa: to 'jest' "tylko" string

to po potraktowaniu go addslashes lub mysql_real_escape_string i wrzuceniu do bazy ma postać: to \'jest\' \"tylko\" string

I gdy chce wyświetlić na stronie to muszę usunąć ukośniki stripslashes.

Jednak tak logicznie nie jest. Otóż te ukośniki gdzieś przy wykonywaniu zapytania giną i w bazie jest nirmalnie string to 'jest' "tylko" string

Sprawdzałem w konsoli mysql.

Czy to tak naprawdę jest?

Mój skrypt się wysypywał bo właśnie cachowałem sobie ustawienia z mysql do pliku ze zmiennymi. Przypisywałem wartości do zmiennych i nie dodawałem ukośnikówbo poco skoro wbazie już są? Jednak właśnie ich tam nie było i musiałem addslashes używać.

Ale mniejsza oto druga sprawato taka że jak mam zmianną:

$zmienna=to 'jest' "tylko" string;

i robię:

echo $zmienna;

to wyświetla mi:

to jest \"tylko\" string -czemu tak?

I wszystkie moje teorie są nic nie warte skoro tego nie wyjaśniają.

Pewnie dla wielu do oczywistość ale ja nigdy tego nie badałem to był błąd bo wszędzie w skryptach mam cykające bomby.

Odnośnik do komentarza
Udostępnij na innych stronach

to po potraktowaniu go addslashes lub mysql_real_escape_string i wrzuceniu do bazy ma postać: to \'jest\' \"tylko\" string
Jeśli ma taką postać znaczy to, że:

1. popełniasz błąd. Używasz addslashes (MRES, AS, magic_quotes) 2 razy przed wrzuceniem do bazy (np. masz magic quotes i oprócz tego MRES). Prawidłowo dla magicquotes powinno być: dane z formularza->stripslashes->MRES.

2. masz włączone magic_quotes_runtime (robi addslashes dla wszystkiego co leci z bazy).

To jest logiczne, że po wrzuceniu do bazy mysql_real_escape_string(" 'costam' "); w bazie będzie 'costam' i pojedyncze cudzysłowy. Bo MRES jest tylko po to, żeby zakodować znaki specjalne w sposób zrozumiały dla bazy a nie żeby zmieniać wartość danych.

co do drugiego przypadku - gdzieś jest AS, MRES lub MQ innego wyjścia nie ma.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności