2017-03-03 1 views
0

()を含むPDO LIKEクエリの実行にいくつかの問題があります。PDO/MYSQL()内のかっこ()

<?php 

...  

$text_with_parentheses = '%'.$text_with_parentheses.'%' 

$sth = $dbh->prepare('SELECT * FROM '.$table.' WHERE alarm LIKE :alarm'); 
$sth->bindParam(':alarm' , $text_with_parentheses); 
$sth->execute(); 
$response = $sth->fetch(); 

... 

?> 

私が照会している文字列値は、varchar utf8_uncode_ci列に格納されたアラームテキストです。それはこのようになります:

'ABCD。ステータスABCD(6):私が括弧をエスケープする方法を見つけ出すことはできませんようだ

「(失敗)。 PHP/PDO経由でMYSQLコンソールで直接テストしました。テストのために私は、MYSQLコンソールで直接フォローをテストしました

SELECT * FROM `table` WHERE `column`='ABCD. Status ABCD (6): (fail)' 

結果が0です。

任意の結果を得るための唯一の方法 - の両方PDOとMYSQLコンソールでは - やっている:

SELECT * FROM `table` WHERE `column` LIKE 'ABCD. status ABCD%' 

をしかし、それは実行可能でないいくつかの値を返します。カッコが含まれていない値を検索すると、うまく動作します。

誰もが考えている?これはMYSQLの問題のようです。

答えて

0

括弧は、意味が全くありません。は、mysql文字列もPDOもありません。

あなたの問題は他の何かによって引き起こされます。

データベースから既存の値を選択して、すべての印刷不可能な文字を参照するためにそれをエンコード:

echo rawurlencode($value); 

をして、比較します。

本物ABCD. Status ABCD (6): (fail)文字列は、異なるデータベースのものから1しばらく

ABCD.%20Status%20ABCD%20%286%29%3A%20%28fail%29 

を行います。違いを比較して確認してください。

+0

使用rawurlencode($ value);テストページで入力と出力を確認します。それは仕事になった。 あなたは正しいと思われます(ofcourse;))。私はいくつかの睡眠を得るより良いと私は明日もコードを実行します。 –

+0

送信されたアラームの一部に二重引用符(")が含まれていて、保存されたコピーが%22(URLエンコード)として出ていることが実際に分かった。 –

関連する問題