Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL REGEXP中使用PHP变量_Php_Mysql_Regex - Fatal编程技术网

在MySQL REGEXP中使用PHP变量

在MySQL REGEXP中使用PHP变量,php,mysql,regex,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[[:>:]]' "); 它可以工作,但它不会只返回精确的匹配项我会

我在表中一行的一个字段中有多个ID,它们之间用
+
分隔 比如:(123+21654+412+12387)

我只需要精确匹配(例如:仅“123”而不是“123&12387”)

我的代码如下:

$var = $value['id'];
$result = mysqli_query($this->dbh, "SELECT id FROM table
      WHERE id REGEXP '[[:<:]]$var[[:>:]]' ");
它可以工作,但它不会只返回精确的匹配项

我会选择:

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

第一个条件适用于如果只有值,如果字段以值开始,第二个,如果字段以值结束,如果值位于字段的中间,则为第三。

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(插值后)
  • 并以
    +
    或字符串结尾停止

  • 单词边界的确切问题是什么?您的MySQL版本是什么?我的MySQL版本是:5.5.32,问题是什么?我无法将PHP变量放入包含REGEXPWell的MySQL查询中,
    “从id REGEXP'[[::]]的表中选择id”
    应该可以工作。因为我在一个字段中有多个id,所以我必须使用REGEXP!
    REGEXP '(^|\+)$id(\+|$)'