我有类似的项目名称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
我有名称为女孩包的物品。但我没有得到任何结果。谁能帮忙,我应该如何格式化我的项目名称以与数据库中的项目匹配。
我有类似的项目名称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,而不是连接字符串来创建查询。
编辑:根据评论,OP\'
在数据中确实有,所以查询应该使用\''
:
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.
如果您在实际数据库中的实际值是“ 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。
使用bind_param和prepare语句作为
$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();