0

我有类似的项目名称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

我有名称为女孩包的物品。但我没有得到任何结果。谁能帮忙,我应该如何格式化我的项目名称以与数据库中的项目匹配。

4

3 回答 3

4

您需要通过执行两个单引号来转义引号(因此更改\'''):

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.
于 2016-06-17T11:48:29.630 回答
1

如果您在实际数据库中的实际值是“ girl\'s bag\'s”,那么您的数据处理根本就存在问题!您不应该对存储在数据库中的值进行转义。首先要解决这个问题!

话虽如此,如果要匹配girl\'s bag\'sSQL 查询中的值,则查询需要如下所示:

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。

请参阅伟大的逃避现实(或:使用文本中的文本需要知道的内容)

于 2016-06-17T12:12:12.640 回答
1

使用bind_paramprepare语句作为

$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();
于 2016-06-17T11:52:32.073 回答