执行包含()。
的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问题。
答案 0 :(得分:0)
括号在mysql字符串和PDO中都没有任何含义。
您的问题是由其他原因造成的。
从数据库中选择现有值并对其进行编码以查看所有不可打印的字符:
echo rawurlencode($value);
然后比较。
真正的ABCD. Status ABCD (6): (fail)
字符串将生成
ABCD.%20Status%20ABCD%20%286%29%3A%20%28fail%29
而一个来自数据库的东西不同。比较并检查差异。