2016-08-30 3 views
1

カスタマーデータベースに名前を挿入するとき、私はreal_escape_stringというMySQLi関数を使ってデータをサニタイズしました。単一引用符で例のエントリは次のようになります。MySQLデータベースのサニタイズされた一重引用符を照会します。

Baker\'s Pharmacy 

私のようなクエリを使用して名前を照会しようとすると、しかし:

$search = "Baker's Pharmacy"; 
$searchName = $db->real_escape_string($search); 
$query = "SELECT Name FROM Customers WHERE Name = '$searchName'"; 

私はマッチを返さない、正しいものをsantised single quotesを検索する方法は?

ご協力いただきありがとうございます。

+0

「$ search = "Baker \\\" s Pharmacy」;と 'real_escape_string'を使用しない – JustOnUnderMillions

+2

*正しい*方法は、データの変更されたバージョンではなく実際のデータを保存することです。あなたが探している実際のデータコードとして実行する前に、手動で入力をサニタイズする代わりに、クエリパラメータを使用して入力を値として扱う必要があります。 – David

+1

スラッシュのない「Baker's Pharmacy」でなければなりません。あなたはあなたのデータを2回エスケープしたようです。 –

答えて

3

間違った仮定が2つありますが、これを解決する必要があります。 は何をサニタイズしていないものは何でも*escape_string機能

  1. 。それはPHPの人々が最終的に取り除く方が良いという厄介な噂です。とにかく、この関数を使用すると、データベースではなくSQLクエリのデータのみをフォーマットします。すべてのスラッシュはデータベースによって取り除かれ、データはそのまま保存されます。代わりに、あなたは、両方の挿入のための書類を作成しmysqliのを使用する必要がありますし、クエリを選択し、magic_quotesのか、彼らの自家製同等がない限り、あなたが引用符(に関連しない単一の問題が表示されますぶらぶらしている「消毒」の

)。

+0

準備されたクエリとesacpe_stringの両方をデータ入力に使用して、データベースに表示されるバックスラッシュを説明します。手動で削除するには余りにも多いので、データベースから既存のスラッシュを削除するクエリがあります。 –

+0

そうです。 esacpe_stringはここで不必要で、問題の原因です。残念ながら、データを整理するための既成のクエリはわかりません。この点で別の質問をするかもしれません –

+0

私は問題を解決するために、小さなPHPスクリプトを書くことができた、すべての助けをありがとう!あまりにも慎重すぎるケース。 –

関連する問題