У меня есть название предмета, как 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
У меня есть товар с именем сумка девушки. но я не получаю никакого результата.
Может ли кто-нибудь помочь, как я должен отформатировать свое имя элемента, чтобы соответствовать элементу в базе данных.
Вы должны избежать кавычек, сделав две одинарные кавычки (так что измените \'
в ''
):
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.
С помощью 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();
Если ваше фактическое значение в вашей фактической базе данных «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 вашей базы данных.
Увидеть Великий эскапизм (или: что нужно знать, чтобы работать с текстом в тексте).