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编码)形式出现。 –