在MySQL REGEXP中使用PHP变量
我在表中一行的一个字段中有多个ID,它们之间用在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[[:>:]]' "); 它可以工作,但它不会只返回精确的匹配项我会
+
分隔
比如:(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(\+|$)'
意思是:
+
开头或后面+
或字符串结尾停止单词边界的确切问题是什么?您的MySQL版本是什么?我的MySQL版本是:5.5.32,问题是什么?我无法将PHP变量放入包含REGEXPWell的MySQL查询中,
“从id REGEXP'[[::]]的表中选择id”
应该可以工作。因为我在一个字段中有多个id,所以我必须使用REGEXP!
REGEXP '(^|\+)$id(\+|$)'