Możesz chcieć zaktualizować swój post, aby zawierał mysql_real_escape_string () lub addlashes () jako możliwe rozwiązania ... tak jak w jednym z poniższych komentarzy, OP stwierdza, że po prostu czytają z pliku i wstawiają.
James B
3
Metody mysql_ * nie są zalecane do użytku w przyszłości, ponieważ są przestarzałe .
hd1
To jest właściwa odpowiedź, chociaż obecnie najlepszą opcją jest użycie jednego z
Ryan,
10
'to znak ucieczki. Więc twój ciąg powinien być:
To jest Pióro Ashoka
Jeśli używasz jakiegoś kodu frontonu, przed wysłaniem danych do procedury składowanej musisz wykonać zamianę ciągu.
Na przykład w C # możesz to zrobić
value = value.Replace("'","''");
a następnie przekazać wartość do procedury składowanej.
Nie wstawiam danych ręcznie, wyodrębniam je z pliku i pojawią się vaklues: pióro Ashoka. Jak to włożyć. stworzyliśmy procedurę, jak to zrobić ... jak to naprawić.
Ashok Gupta
Dodatkowa nitka FWIW: ukośnik odwrotny to „znak ucieczki”; ''(dwa pojedyncze cudzysłowy) to specjalna alternatywa dozwolona dla „zmiany znaczenia” znaku pojedynczego cudzysłowu.
Każda biblioteka, której używasz do rozmowy z MySQL, będzie miała wbudowaną funkcję ucieczki, np. W PHP możesz użyć mysqli_real_escape_string lub PDO :: quote
Nie wstawiam danych ręcznie, wyodrębniam je z pliku i będą tam wartości: pióro Ashoka. Jak to włożyć. stworzyłem procedurę, jak to zrobić… jak to naprawić.
Ashok Gupta
Tylko uwaga, This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used..
NewBee
7
Jeśli korzystasz z przygotowanych instrukcji, sterownik obsłuży każdą ucieczkę. Na przykład (Java):
Tylko uwaga, This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used..
NewBee
6
Jest na to inny sposób, który może być bezpieczniejszy lub nie, w zależności od twojej perspektywy. To wymaga MySQL 5.6 lub później z powodu korzystania z określonej funkcji strun: FROM_BASE64.
Powiedzmy, że masz tę wiadomość, którą chcesz wstawić:
„Ach,” Prawie Bezgłowy Nick machnął elegancką ręką, „sprawa bez znaczenia… To nie jest tak, że naprawdę chciałem się przyłączyć… Myślałem, że aplikuję, ale najwyraźniej nie spełniam wymagań "-"
Ten cytat zawiera kilka pojedynczych i podwójnych cudzysłowów i byłoby naprawdę trudne do wstawienia do MySQL. Jeśli wstawiasz to z programu, łatwo jest uniknąć cudzysłowów itp. Ale jeśli musisz umieścić to w skrypcie SQL, będziesz musiał edytować tekst (aby uniknąć cudzysłowów), który może być podatny na błędy lub wrażliwe na zawijanie słów itp.
Zamiast tego możesz zakodować tekst Base64, aby uzyskać „czysty” ciąg:
Kodowanie Base64 jest kodowaniem binarnym , więc lepiej upewnij się, że zestaw znaków jest poprawny podczas kodowania, ponieważ MySQL zdekoduje ciąg zakodowany w Base64 na bajty, a następnie zinterpretuje je. Upewnij się, że base64MySQL zgadzają się co do kodowania znaków (polecam UTF-8).
Zawijałem ciąg do 50 kolumn, aby zapewnić czytelność na przepełnieniu stosu. Możesz zawinąć go do dowolnej liczby kolumn (lub w ogóle nie zawijać) i nadal będzie działać.
Tylko uwaga, This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used..
Odpowiedzi:
Mówiąc prościej:
SELECT 'This is Ashok''s Pen.';
Więc wewnątrz ciągu zamień każdy pojedynczy cytat na dwa z nich.
Lub:
SELECT 'This is Ashok\'s Pen.'
Escape it =)
źródło
'to znak ucieczki. Więc twój ciąg powinien być:
Jeśli używasz jakiegoś kodu frontonu, przed wysłaniem danych do procedury składowanej musisz wykonać zamianę ciągu.
Na przykład w C # możesz to zrobić
a następnie przekazać wartość do procedury składowanej.
źródło
''
(dwa pojedyncze cudzysłowy) to specjalna alternatywa dozwolona dla „zmiany znaczenia” znaku pojedynczego cudzysłowu.Zobacz moją odpowiedź na temat „Jak zmienić znaczenie znaków w MySQL”
Każda biblioteka, której używasz do rozmowy z MySQL, będzie miała wbudowaną funkcję ucieczki, np. W PHP możesz użyć mysqli_real_escape_string lub PDO :: quote
źródło
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
.Jeśli korzystasz z przygotowanych instrukcji, sterownik obsłuży każdą ucieczkę. Na przykład (Java):
źródło
Użyj tego kodu:
To rozwiąże problem, ponieważ baza danych nie może wykryć znaków specjalnych ciągu.
źródło
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
.Jest na to inny sposób, który może być bezpieczniejszy lub nie, w zależności od twojej perspektywy. To wymaga MySQL 5.6 lub później z powodu korzystania z określonej funkcji strun:
FROM_BASE64
.Powiedzmy, że masz tę wiadomość, którą chcesz wstawić:
Ten cytat zawiera kilka pojedynczych i podwójnych cudzysłowów i byłoby naprawdę trudne do wstawienia do MySQL. Jeśli wstawiasz to z programu, łatwo jest uniknąć cudzysłowów itp. Ale jeśli musisz umieścić to w skrypcie SQL, będziesz musiał edytować tekst (aby uniknąć cudzysłowów), który może być podatny na błędy lub wrażliwe na zawijanie słów itp.
Zamiast tego możesz zakodować tekst Base64, aby uzyskać „czysty” ciąg:
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K
Kilka uwag na temat kodowania Base64:
base64
MySQL zgadzają się co do kodowania znaków (polecam UTF-8).Teraz, aby załadować to do MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64(' SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K '));
Spowoduje to wstawienie bez żadnych skarg i nie musisz ręcznie zmieniać znaczenia żadnego tekstu w ciągu.
źródło
Powinieneś uciec przed znakami specjalnymi za pomocą
\
znaku.Staje się:
źródło
Jeśli chcesz zachować apostrof (') w bazie danych, użyj poniższego kodu
$ new_value może przechowywać w bazie danych.
źródło
Możesz użyć tego kodu,
jeśli mysqli_real_escape_string () nie działa.
źródło
W PHP użyj mysqli_real_escape_string .
Przykład z podręcznika PHP:
źródło
źródło
Jeśli używasz PHP, po prostu użyj funkcji addlashes ().
Podręcznik PHP dodaje ukośniki
źródło
Aby uzyskać dostęp programowy, możesz użyć symboli zastępczych, aby automatycznie uciec przed niebezpiecznymi znakami.
Na przykład w Perl DBI możesz użyć:
źródło
Użyj addlahes () lub mysql_real_escape_string ().
źródło
This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
.Tak jak ja, używając Delphi:
TheString to „escape”:
Rozwiązanie:
Wynik:
Ta funkcja zamieni wszystkie znaki Char (39) na "\ '", umożliwiając wstawianie lub aktualizowanie pól tekstowych w MySQL bez żadnego problemu.
Podobne funkcje można znaleźć we wszystkich językach programowania!
źródło
Może mógłbyś rzucić okiem na funkcję
QUOTE
w podręczniku MySQL.źródło