Postgres-如何从表中获取转义数据


Postgres - How to fetch escaped data from table

解决方案看起来很简单,但我发现很难绕过它。在表中,样本数据如下:

 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准备好的语句插入了这些数据,所以单引号已经被正确地转义了。

事实并非如此。

如果他们逃脱得当,数据库中就会有原始字符串"女性旅馆"。但当您对数据库中的数据进行转义时,这意味着转义发生了两次

因此,您必须在插入期间查找并删除多余的转义。

然后选择任何常用的数据方式。不管你有没有引号,都没有区别。