我的项目名称如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 :(得分: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.
但是最好使用准备好的staments并将参数绑定到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.
答案 1 :(得分:1)
将bind_param和prepare声明用作
for(String genre:m.getGenre()){
TextView text = new TextView(context);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
text.setLayoutParams(p);
text.setText(genre);
text.setTextAppearance(R.style.boldText);
mgenre.addView(text);
}
答案 2 :(得分:1)
如果您在实际数据库中的实际值是" girl\'s bag\'s
",那么您的数据处理根本就会出现问题!您不应该转储存储在数据库中的值。首先解决这个问题!
话虽如此,如果要在SQL查询中匹配值girl\'s bag\'s
,查询需要如下所示:
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。
请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。