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問題。
使用rawurlencode($ value);在測試頁面中檢查輸入和輸出。得到它的工作。 看來你是對的(ofcourse;))。我最好再睡一會兒,明天再看一遍代碼。 –
發現問題實際上是一些發送的警報包含雙引號("),並且存儲的副本以%22(URL編碼)形式出現。 –