我有一个看起来像这样的字段:
智力:0/75
我有一个表单,用户可以搜索此字符串的值。在我的实时网络服务器上,这是查询:
SELECT * FROM `test` WHERE `id` IS NOT NULL AND `file` REGEXP CONCAT('Intelligence(: | : )([', :var2, '-9]|[0-9]{2,3})[ ]{0,1}/[ ]{0,1}([', :var2, '-9]|[0-9]{1,3})')
$var2 = $_POST['int'];
$stmt->bindValue(':var2', $var2);
:var2
是 $_POST 值。我一直在使用4
. 这是插入 4 时的文字正则表达式:
Intelligence(: | : )([4-9]|[0-9]{2,3})[ ]{0,1}/[ ]{0,1}([4-9]|[0-9]{1,3})
由于我的数据库中的字段是Intelligence: 0/75
这个查询不应该产生任何结果。但它确实在我的实时网络服务器上。它返回字段Intelligence: 0/75
。
如果我在 phpmyadmin 中运行这个 EXACT 查询,我不会得到任何结果。我已经在我的文本编辑器中排列了来自 phpmyadmin 和我的服务器的查询,它们是相同的。就这样我没疯,这是从 phpmyadmin 复制/粘贴的查询:
SELECT *
FROM `test`
WHERE `id` IS NOT NULL
AND `file`
REGEXP CONCAT( 'Intelligence(: | : )([4-9]|[0-9]{2,3})[ ]{0,1}/[ ]{0,1}([4-9]|[0-9]{1,3})' )
谁能明白为什么这会产生两个差异。结果?
更新:
我想我已经把它缩小到PHP。如果我将绑定到的值更改:var2
为喜欢
$stmt->bindValue(':var2', '6284');
结果是一样的。返回所有带有Intelligence: 0/75
的行。
如果我删除bindValue
代码,那么:var2就没有绑定任何东西了,结果还是一样的!
print_r($stmt) =
SELECT * FROM `test` WHERE `id` IS NOT NULL AND `file` REGEXP
CONCAT('(INT:[ ]{1,2}([', :var2, '-9]|[0-9]{2,3})[ ]{1,2}/[ ]{1,2}([', :var2, '-9]|[0-9]{1,3})|Intelligence(: | : )([', :var2, '-9]|[0-9]{2,3})[ ]{0,1}/[ ]{0,1}([', :var2, '-9]|[0-9]{1,3}))')