【问题标题】:use PHP variable in MySQL REGEXP在 MySQL REGEXP 中使用 PHP 变量
【发布时间】:2018-09-28 08:38:44
【问题描述】:

我在表中一行的一个字段中有多个 ID,由 + 分隔 点赞:(123+21654+412+12387)

我只需要完全匹配,(例如:只有“123”而不是“123 & 12387”)

我的代码是这样的:

$var = $value['id'];
$result = mysqli_query($this->dbh, "SELECT id FROM table
      WHERE id REGEXP '[[:<:]]$var[[:>:]]' ");

我在 REGEXP 中使用变量时遇到问题。

如果是:

$result = mysqli_query($this->dbh, "Select id FROM table
      WHERE id REGEXP '^$id|[\+]$id' ");

它有效,但它不只返回完全匹配

【问题讨论】:

  • 单词边界的确切问题是什么?你的 MySQL 版本是多少?
  • 我的 MySQL 版本是:5.5.32
  • 问题出在哪里?
  • 我无法将 PHP 变量放入包含 REGEXP 的 MySQL 查询中
  • 好吧,"SELECT id FROM table WHERE id REGEXP '[[:&lt;:]]" . $var . "[[:&gt;:]]' " 应该可以了。

标签: php mysql regex


【解决方案1】:

PHP 提示:“插值”的工作方式如下:

  • "...$var[...]..." 将其视为$var[...] 的数组查找。
  • 没有[$var 被假定为一个标量。
  • "...{$var}[...]..." 是你所需要的

最后一个例子有大括号{} 告诉PHP 评估里面的内容而不关心后面的内容。更常见的用法:

$var = 'abc';
// I want to generate "abc123"
$bad  = "$var123";   // looks for variable 'var123'
$good = "{$var}123;  // correctly yields "abc123"

您的第二次尝试可以这样解决:

REGEXP '(^|\+)$id(\+|$)'

意思:

  1. + 的开头或之后,
  2. 查找$id(插值后),
  3. 并以+ 或字符串结尾停止。

【讨论】:

    【解决方案2】:

    我会去的:

    $sql = "SELECT id FROM table WHERE id='123' OR id LIKE '123+%' OR id LIKE '%+123' OR id LIKE '%+123+%'";
    

    如果您只有值,则适用第一个条件,如果字段以值开头,则适用第二个条件,如果字段以值结尾,则适用第三个条件,如果值在字段中间,则适用第四个条件。

    【讨论】:

    • 因为我在一个字段中有多个 id,所以我必须使用 REGEXP!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多