【问题标题】:query with slashes带斜杠的查询
【发布时间】:2016-06-17 11:46:10
【问题描述】:

我有像 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

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

【问题讨论】:

  • 更好地使用prepare和bind语句。
  • 你数据库中的实际值是“girl\'s”...?!如果是这种情况,您的数据处理确实出了问题。
  • 换成“%girl\'s bag\'s%”

标签: php mysql sql stripslashes


【解决方案1】:

你需要通过做两个单引号来转义引号(所以将\'更改为''):

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.

【讨论】:

  • 仍然没有得到任何结果。
  • 也许您没有数据?您是否尝试过在 mysql admin 中运行查询?还是只是查看表格数据?
  • 我在表中有同名的数据..并且从 phpmyadmin 运行,但仍然没有得到结果。我的桌子上有女孩的包..
  • 如果数据中确实有\',那么需要在查询中做\''。 @HimanshuUpadhyay 更新了我的答案。
【解决方案2】:

使用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();

【讨论】:

    【解决方案3】:

    如果您在实际数据库中的实际值为“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)

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多