次のようなフィールドがあります。
知能: 0/75
ユーザーがこの文字列の値を検索できるフォームがあります。私のライブ Web サーバーでは、これはクエリです。
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
このクエリでは結果が得られません。しかし、私のライブWebサーバーではそうです。フィールドを返しますIntelligence: 0/75
。
この EXACT クエリを phpmyadmin で実行すると、結果が得られません。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})' )
なぜこれが2つの差分を生み出しているのか、誰にもわかりますか。結果?
アップデート:
私はそれを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}))')