Dokumentacja MySQL mówi, że tak powinno być \'
. Jednak zarówno scite, jak i mysql pokazują, że ''
działa. Widziałem to i działa. Co powinienem zrobić?
\'
jest specyficzny dla MySQL, podczas gdy ''
jest zgodny z ANSI SQL, jeśli się nie mylę
Dokumentacja MySQL mówi, że tak powinno być \'
. Jednak zarówno scite, jak i mysql pokazują, że ''
działa. Widziałem to i działa. Co powinienem zrobić?
\'
jest specyficzny dla MySQL, podczas gdy ''
jest zgodny z ANSI SQL, jeśli się nie mylę
Odpowiedzi:
Cytowana przez ciebie dokumentacja MySQL mówi nieco więcej, niż wspominasz. Mówi również:
„
'
” Wewnątrz ciągu cytowanego za pomocą „'
” można zapisać jako „''
”.
(Ponadto utworzono link do tabeli 8.1 w wersji MySQL 5.0. Sekwencje specjalne znaków specjalnych , a aktualna wersja to 5.6 - ale aktualna tabela 8.1. Sekwencje specjalne znaków specjalnych wyglądają całkiem podobnie).
Myślę, że notatka Postgres dotycząca backslash_quote (string)
parametru ma charakter informacyjny:
Określa, czy cudzysłów może być reprezentowany przez
\'
literał ciągu. Preferowanym sposobem przedstawiania cudzysłowu w standardzie SQL jest jego podwojenie (''
), ale PostgreSQL również w przeszłości akceptował\'
. Jednak użycie\'
stwarza zagrożenia bezpieczeństwa ...
To mówi mi, że użycie podwójnego znaku pojedynczego cudzysłowu jest lepszym ogólnym i długoterminowym wyborem niż użycie odwrotnego ukośnika w celu uniknięcia pojedynczego cudzysłowu.
Teraz, jeśli chcesz dodać do równania również wybór języka, wybór bazy danych SQL i jej niestandardowych dziwactw oraz wybór struktury zapytania, możesz skończyć z innym wyborem. Nie podajesz zbyt wielu informacji o swoich ograniczeniach.
Standardowy SQL używa podwójnych cudzysłowów; MySQL musi to zaakceptować, aby był w miarę zgodny.
'He said, "Don''t!"'
'
” wewnątrz ciągu cytowanego z „ '
” może być zapisane jako „ ''
” . „ "
” Wewnątrz ciągu cytowanego za pomocą „ "
” można zapisać jako „ ""
”. Poprzedź cudzysłów znakiem zmiany znaczenia („„ ”).
Uważam, że user2087510 miał na myśli:
name = 'something'
name = name.replace("'", "\\'")
Użyłem tego również z powodzeniem.
Oto przykład:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Po prostu użyj podwójnych cudzysłowów, aby ująć pojedynczy cudzysłów.
Jeśli nalegasz na używanie pojedynczych cudzysłowów (i potrzebujesz zmiany znaczenia znaku):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Są trzy sposoby, których jestem świadomy. Pierwsza nie jest najładniejsza, a druga jest powszechna w większości języków programowania:
'I mustn''t sin!'
\
przed pojedynczym cudzysłowem'
:'I mustn\'t sin!'
"I mustn't sin!"
\'
jak jest używane w wielu językach programowania, ale ''
jest obsługiwane przez więcej dialektów SQL, więc użycie opcji 1 jest lepsze ze względu na kompatybilność. Na przykład Sqlite nie działa ze znakami ucieczki odwrotnym ukośnikiem.
Wymień sznurek
value = value.replace(/'/g, "\\'");
gdzie wartość to ciąg znaków, który będzie przechowywany w bazie danych.
Dalej,
Pakiet NPM do tego możesz zajrzeć
Myślę, że jeśli masz jakiś punkt danych z apostrofem, możesz dodać jeden apostrof przed apostrofem
na przykład. „To jest miejsce Johna”
Tutaj MYSQL zakłada dwa zdania „To jest miejsce Johna”
Możesz wpisać „To miejsce Jana”. Myślę, że to powinno działać w ten sposób.
W PHP lubię używać mysqli_real_escape_string (), która ucieka ze znaków specjalnych w ciągu znaków do użycia w instrukcji SQL.
zobacz https://www.php.net/manual/en/mysqli.real-escape-string.php
Prawdopodobnie nie na temat, ale może przyszedłeś tutaj, szukając sposobu na wyczyszczenie tekstu wprowadzanego z formularza HTML, aby gdy użytkownik wprowadził znak apostrofu, nie wyświetlał błędu podczas próby zapisania tekstu do SQL tabela oparta na bazie danych w bazie danych. Jest na to kilka sposobów i możesz również przeczytać o iniekcji SQL, ale prostą opcją w PHP jest użycie funkcji htmlspecialchars (), która zamieni wszystkie twoje apostrofy na '
to, co prawdopodobnie chcesz przechowywać tak czy siak.
''
czy\'
jest poprawna?