在MySQL REGEXP中使用PHP变量

时间:2018-09-28 08:38:44

标签: php mysql regex

我在表中一行的一个字段中有多个+隔开的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' ");

它可以工作,但不只返回完全匹配项

2 个答案:

答案 0 :(得分:0)

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. 然后以+或字符串结尾结束。

答案 1 :(得分:-1)

我去:

array(5) {
  [0]=>
  string(5) "hello"
  [1]=>
  string(11) "how are you"
  [2]=>
  string(11) "how is life"
  [3]=>
  string(20) "live life, live free"
  [4]=>
  string(10) ""isnt it?""
}

如果只有值,则应用第一个条件,如果字段以值开头,则第二个条件,如果字段以值结尾,则第三个条件,如果值位于字段的中间,则第四个条件。

>