用斜杠查询

时间:2016-06-17 11:46:10

标签: php mysql sql stripslashes

我的项目名称如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

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

3 个答案:

答案 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_paramprepare声明用作

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)