在mysql regexp中使用php变量

cwdobuhd  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(375)

我有多个身份证 + 在表中一行的一个字段中,例如:(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' ");

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

6l7fqoea

6l7fqoea1#

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(\+|$)'

含义:
开始或结束时 + ,
查找$id(插值后),
停下来喝一杯 + 或者是绳子的末端。

rn0zuynd

rn0zuynd2#

我同意:

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

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

相关问题