解决方案看起来很简单,但我发现很难绕过它。在表中,样本数据如下:
id | name | created_time
-------+----------------------------------+----------------------------
41477 | women''s hostels | 2016-03-24 13:52:52.855116
41476 | women''s hostels | 2016-03-24 13:52:49.895482
41475 | women''s hostels | 2016-03-24 13:52:49.735788
41471 | men''s hostel | 2016-03-24 13:52:42.907983
41469 | women''s clothing shops | 2016-03-24 13:52:30.666364
我已经使用PHP的PDO准备好的语句插入了这些数据,所以单引号已经被正确地转义了。
现在我想获取名称与完全匹配的记录
女子旅馆
我想通过使用原始SQL查询和PDO两种方式来实现这一点。我正在尝试以下两种情况,但没有得到任何结果:
原始SQL:
SELECT id FROM <TABLE> where name = 'women''s hostels';
SELECT id FROM <TABLE> where name ilike 'women''s hostels';
SELECT id FROM <TABLE> where name::text = 'women''s hostels';
PDO:
$data = "women''s hostels";
$sql = "SELECT id FROM <TABLE> where name=?"; (tried all variations as above)
$stmt->execute(array($data));
$rows = $stmt->fetchAll();
名称字段在下表中定义:
Column | Type |
name | character varying(255) |
请帮忙。如果还需要什么,请告诉我。任何帮助都将不胜感激。
数据库中首先不应该有转义数据。
我已经使用PHP的PDO准备好的语句插入了这些数据,所以单引号已经被正确地转义了。
事实并非如此。
如果他们逃脱得当,数据库中就会有原始字符串"女性旅馆"。但当您对数据库中的数据进行转义时,这意味着转义发生了两次。
因此,您必须在插入期间查找并删除多余的转义。
然后选择任何常用的数据方式。不管你有没有引号,都没有区别。