【问题标题】:Using SQL like for pattern query使用 SQL like 进行模式查询
【发布时间】:2013-09-12 19:36:32
【问题描述】:

我有一个 PHP 函数,它接受一个名为 $letter 的参数,我想将参数的默认值设置为“任何数字或任何符号”的模式。我该怎么做?

顺便说一下,这是我的查询。

select ID from $wpdb->posts where post_title LIKE '".$letter."%

我尝试在 wordpress stackexchange 上发帖,他们告诉我在这里发帖,因为这是一个特定于 wordpress 的 SQL/通用编程问题。

谢谢!非常感谢回复:)

【问题讨论】:

  • 默认值是%,那么?或者只是空的,因为您在该查询中已经有一个 %
  • 您使用的是哪个数据库?我为 MySQL 添加了一个可能的解决方案
  • 看起来这段代码容易受到sql注入攻击。这真的很糟糕。

标签: sql database sql-like


【解决方案1】:

为了只匹配数字或字母(我不确定您所说的符号究竟是什么意思),您可以在 MySQL 中使用 RLIKE 运算符:

SELECT ... WHERE post_title RLIKE '^[A-Za-z0-9]'

这意味着默认情况下$letter 将是[A-Za-z0-9] - 这意味着从 a 到 z(两种情况)的所有字母和从 0 到 9 的数字。如果您需要特定符号,您可以将它们添加到列表中(但 - 必须是第一个或最后一个,否则它具有范围的特殊含义)。 ^ 字符告诉它位于字符串的开头。所以你需要这样的东西:

"select ID from $wpdb->posts where post_title RLIKE '^".$letter."%'"

当然,如果您在不清理输入的情况下构建这样的查询(确保其中没有任何 '(撇号),我必须警告您不要受到 SQL 注入攻击。

编辑

要匹配以数字开头的标题,只需使用 [0-9] - 这意味着它将匹配从 0 到 9 的一位数字

【讨论】:

  • 您好,谢谢您的回复,实际上这是我现在的问题。当我想要任何数字或任何符号时,它匹配所有内容。
  • 您好,非常感谢您! :) 如果我只想要任何数字呢?
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多