查询中的PDO / MYSQL括号()

时间:2017-03-03 12:19:19

标签: mysql pdo

执行包含()。

的PDO LIKE查询时遇到一些问题
<?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问题。

1 个答案:

答案 0 :(得分:0)

括号在mysql字符串和PDO中都没有任何含义

您的问题是由其他原因造成的。

从数据库中选择现有值并对其进行编码以查看所有不可打印的字符:

echo rawurlencode($value);

然后比较。

真正的ABCD. Status ABCD (6): (fail)字符串将生成

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

而一个来自数据库的东西不同。比较并检查差异。