Py学习  »  DATABASE

在mysql regexp中使用php变量

iCode98 • 5 年前 • 1466 次点击  

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

它有效,但它不返回完全匹配的结果

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39210
 
1466 次点击  
文章 [ 2 ]  |  最新文章 5 年前
niiwig
Reply   •   1 楼
niiwig    6 年前

我会去的:

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

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

Rick James
Reply   •   2 楼
Rick James    6 年前

php提示:“interpolation”的工作方式如下:

  • "...$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. 然后停下来 + 或字符串的结尾。