再次登记。
尝试运行类似SQL查询:
mysql_query("SELECT * From tablename WHERE somthing LIKE '%id|length:3:\"{$id}\"%'");
问题是长度值将是未知的,只有ID。
当然,我可以使用strlen($ id)并执行此操作:
$len = intval(strlen($id));
mysql_query("SELECT * From tablename WHERE somthing LIKE '%id|length:{$len}:\"{$id}\"%'");
但我真的不在乎检查len值,必须有一些Reg ex来匹配任何长度的东西,并在不必计算长度之前对其进行排序。
mysql_query("SELECT * From tablename WHERE somthing LIKE '%id|length:^*:\"{$id}\"%'");
想法?
答案 0 :(得分:1)
@ Naddiseo的链接很好,我建议你使用REGEXP
。 “没有确切的示例匹配”是什么意思?
尝试类似的东西(我在新行中添加了可读性):
mysql_query("SELECT * From tablename
WHERE somthing
REGEXP '^.*id\\\|length:[0-9]+:\"{$id}\".*$'");
相关的正则表达式无需担心转义MYSQL / php字符串
^.*id\|length:[0-9]+:"abc".*$
(假设abc
是特定的$ {id})。
它说,“查找任何后跟文字字符串id|length:
的内容(我已将其转义为|
在正则表达式中具有特殊含义,您需要文字{ {1}}),后跟数字(|
)作为ID的长度,后跟[0-9]+
和其他任何内容(其中:"{$id}"
已被替换)。
现在,如果您阅读@Naddiseo引用的MySQL regexp page,您会看到任何反斜杠都需要进一步转义,因为MySQL会将反斜杠解析为特殊字符。
因此,如果您要将此查询输入MySQL命令行(我们现在假设{$id}
为{$id}
),则必须输入:
abc
现在,既然你是用双引号中的PHP调用它,你需要再次转义反斜杠 以确保正确的数字通过MySQL,以及反斜杠你的双引号来逃避他们。因此,在SELECT * From tablename
WHERE somthing
REGEXP '^.*id\\|length:[0-9]+:"abc".*$'
之前的mysql_query
中有三个反斜杠。