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

时间:2016-03-25 07:52:39

标签: php sql database postgresql pdo

解决方案似乎很简单,但我发现很难解决。在表中,示例数据如下:

 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)      |  

请帮忙。如果还有其他需要,请告诉我。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

首先,数据库中不应存在转义数据。

  

我已使用PHP的PDO预处理语句插入此数据,因此单引号已正确转义。

他们一直没有。

如果他们正确逃脱,你就会在数据库中拥有原始字符串,并且#34;女性的宿舍&#34;。但是,当您在数据库中转储数据时,这意味着转发发生两次

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

然后选择通常的数据。无论你是否有引号都没有区别。