запрос с косой чертой

У меня есть название предмета, как girl\'s bag\'s,
так что запрос становится как ниже

SELECT *
FROM tbl_product
WHERE itm_name LIKE '%girl\'s bag\'s%'
AND status = '1'
AND is_available = '1'
ORDER BY itm_id DESC
LIMIT 20

У меня есть товар с именем сумка девушки. но я не получаю никакого результата.
Может ли кто-нибудь помочь, как я должен отформатировать свое имя элемента, чтобы соответствовать элементу в базе данных.

0

Решение

Вы должны избежать кавычек, сделав две одинарные кавычки (так что измените \' в ''):

select * from tbl_product where itm_name like '%girl''s bag''s%' and status='1' and is_available='1' order by itm_id DESC limit 20.

Но было бы лучше использовать подготовленные положения и привязывать параметры к SQL, а не объединять строки для создания запроса.

РЕДАКТИРОВАТЬ: на основе комментария, ОП имеет \' буквально в данных, поэтому запрос должен использовать \'':

select * from tbl_product where itm_name like '%girl\''s bag\''s%' and status='1' and is_available='1' order by itm_id DESC limit 20.
4

Другие решения

С помощью bind_param а также подготовить заявление как

$like = "%girl's bag's%";// pass  string
$sql = "select * from tbl_product where itm_name like ? and status= ? and is_available=? order by itm_id DESC limit ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('siii', $like, 1, 1, 20);
$stmt->execute();
1

Если ваше фактическое значение в вашей фактической базе данных «girl\'s bag\'s«, тогда что-то в корне не так с вашей обработкой данных! Вы не должны были экранировать значения, хранящиеся в вашей базе данных. Исправьте это в первую очередь!

Сказав это, если вы хотите соответствовать значению girl\'s bag\'s в запросе SQL запрос должен выглядеть следующим образом:

WHERE ... LIKE '%girl\\\'s bag\\\'s%'

Ты хочешь один буквальный обратный слеш, который вы должны экранировать с обратной косой чертой, за которой следует обратная косая черта, которая экранирует одиночную кавычку. Итак, первые два \\ означает «\», а третий обратный слеш просто сохраняет синтаксис SQL-кавычек.

Вы никогда не беспокоитесь о количестве слешей вручную, вместо этого вы используете правильный API базы данных для правильной подготовки значений! Это означает, что вы должны использовать подготовленные заявления:

$value = "girl\'s bag\'s";

$stmt = $pdo->prepare('... WHERE ... LIKE ?');
$stmt->bindValue(1, '%' . $value . '%');
$stmt->execute();

Как это сделать, зависит от API вашей базы данных.

Увидеть Великий эскапизм (или: что нужно знать, чтобы работать с текстом в тексте).

1
По вопросам рекламы [email protected]