2016-03-25 27 views
1

解決策はシンプルなようですが、私はそれを回避するのが難しいと感じています。テーブルでは、サンプルデータは、次のようにされていますPostgres - テーブルからエスケープされたデータを取得する方法

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

助けてください。他に何かが必要な場合は教えてください。どんな助けもありがとう。

答えて

2

最初にデータベースにエスケープされたデータは存在しません。

PHPのPDOプリペアドステートメントを使用してこのデータを挿入したので、一重引用符が正しくエスケープされています。

これらはされていません。

彼らは正しくエスケープされましたか、データベースの元の文字列「女性のホステル」を持っていました。しかし、データベースのデータをエスケープすると、エスケープがの2回ので発生したことになります。

の間にその余分なエスケープを削除して削除する必要があります。

通常の方法でデータを選択します。あなたがそれに引用符をつけているかどうかは違いありません。

+0

ありがとう@あなたの常識!私は自分がしていた間違ったことを理解した。 – vsingh

関連する問題