Документація MySQL говорить, що так і має бути \'
. Однак і scite, і mysql показують, що це ''
працює. Я це бачив і це працює. Що я повинен зробити?
\'
специфічний MySQL, а ''
сумісний з ANSI SQL, якщо я не помиляюся
Документація MySQL говорить, що так і має бути \'
. Однак і scite, і mysql показують, що це ''
працює. Я це бачив і це працює. Що я повинен зробити?
\'
специфічний MySQL, а ''
сумісний з ANSI SQL, якщо я не помиляюся
Відповіді:
Документація MySQL, яку ви цитуєте, насправді говорить трохи більше, ніж ви згадуєте. Це також говорить,
"
'
" Всередині рядка, цитованого "'
", може бути записано як "''
".
(Крім того, ви пов’язані з версією MySQL 5.0 таблиці 8.1. Послідовності втечі спеціальних символів ; поточна версія - 5.6 - але поточна Таблиця 8.1. Послідовності втечі спеціальних символів виглядає досить схоже.)
Я думаю, що примітка Postgres про backslash_quote (string)
параметр є інформативною:
Це контролює, чи можна позначити лапки
\'
в прямому рядку. Кращим, стандартним способом подання позначення лапки є подвоєння його (''
), але PostgreSQL історично також прийнято\'
. Однак використання\'
створює ризики для безпеки ...
Це говорить мені, що використання подвоєного символу з одною цитатою є кращим загальним та довгостроковим вибором, ніж використання зворотної косої риси для виходу з одноцитати.
Тепер, якщо ви також хочете додати до рівня рівня вибір мови, вибір бази даних SQL та її нестандартні вигадки, а також вибір структури запитів до рівняння, то, можливо, ви отримаєте інший вибір. Ви не даєте багато інформації про свої обмеження.
Стандартний SQL використовує подвоєні котирування; MySQL повинен прийняти це, щоб бути розумно сумісним.
'He said, "Don''t!"'
'
" всередині рядка, що цитується " '
", може бути записано як " ''
" . " "
" Всередині рядка, цитованого " "
", може бути записано як " ""
". Попередьте символ цитування символом втечі ("` `").
Я вважаю, що користувач2087510 мав на увазі:
name = 'something'
name = name.replace("'", "\\'")
Я також використовував це з успіхом.
Ось приклад:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Просто використовуйте подвійні лапки, щоб укласти єдину цитату.
Якщо ви наполягаєте на використанні одинарних лапок (і необхідності уникати символу):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Я знаю три способи. Перший не найкрасивіший, а другий - поширений у більшості мов програмування:
'I mustn''t sin!'
\
перед єдиною цитатою'
:'I mustn\'t sin!'
"I mustn't sin!"
\'
як воно використовується у багатьох мовах програмування, але ''
підтримується більшістю діалектів SQL, тому використання параметра 1 краще для сумісності. Наприклад, Sqlite не працює із втеченими зворотними кутами.
Замініть рядок
value = value.replace(/'/g, "\\'");
де значення - це ваш рядок, який буде зберігатися у вашій базі даних.
Далі,
NPM пакет для цього, ви можете переглянути його
Я думаю, якщо у вас є точка даних з апострофом, ви можете додати один апостроф перед апострофом
напр. "Це місце Джона"
Тут MYSQL передбачає два речення "Це місце Джона"
Ви можете поставити "Це місце Джона". Я думаю, що так має працювати.
У PHP мені подобається використовувати mysqli_real_escape_string (), який уникає спеціальних символів у рядку для використання в операторі SQL.
дивіться https://www.php.net/manual/en/mysqli.real-escape-string.php
Можливо, поза темою, але, можливо, ви прийшли сюди, шукаючи спосіб переосмислити введення тексту у формі HTML, так що коли користувач вводить символ апострофа, він не видає помилки, коли ви намагаєтесь написати текст у SQL таблиця в базі даних. Є кілька способів зробити це, і ви, можливо, захочете почитати і про ін'єкцію SQL, але простим варіантом у PHP є використання функції htmlspecialchars (), яка перетворить усі ваші апострофи в те, '
що можливо зберігати все одно.
''
чи\'
це правильно?