2012-03-14 8 views
-4

私は以下のコードをの姓(大文字と小文字を区別)からDBでチェックしています。SQLで一重引用符で名前を確認するにはどうすればよいですか?

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'ravi' 

その作業は問題ありません。しかし、以下のような名前のときには動作しません。PHP変数($ lname)を使ってこの姓を渡します。

SELECT * FROM $table_name WHERE BINARY LastName LIKE '$last_name' 
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O'Connor' 

どうすれば解決できますか。

+0

一重引用符をエスケープするだけで済みます。 – Lion

+0

私も同様の質問がありました。それに対する答えはあなたの役に立つかもしれません。 http://stackoverflow.com/q/8807690/212940 – vascowhite

答えて

0

あなたのPHPスクリプトでクエリを構築している、のためにあなたが探している値にaddslashes機能を使用します。これは、それを必要とする任意の文字をエスケープし、あなたが結果を生成します

$query = "SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE '" . addslashes($name) . "'" 

探している。

別の解決策ではなく、単一引用符のクエリで二重引用符を使用することです:

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE "O'Connor" 

が、私は最初のソリューションこれは私が

私のために働く

+0

私はphp変数($ lname)を使ってこの姓を渡します。 SELECT * FROM $ table_name WHERE BINARY LastName LIKE '$ last_name' –

+1

@Ravichandran:最初の場所で変数を渡すときはaddslashesを使用することもできます。addslashes($ lname) – hellsgate

2

あなたは、単一引用符ですべての単一引用符をエスケープする必要があります。

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O''Connor' 
-1
SELECT * FROM sometable where LastName LIKE '%''%' 
0

あなたが自分で引用符を一致させるための正規表現を使用する小さなプログラムを書くことができ、プログラムがユーザによって行われたミスを検証し、修正することができます。

2

これは機能するはずです。

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O\'Connor' 

そしてもちろん、PHPのために、あなたはmysql_escapeまたはすべてのPDOを持っているあなたが使用LIKE値をPHP変数にバインドされている与えられた、自動的にこのの世話をする文を作成しました。

+0

私はphp変数($ lname)を使ってこの姓を渡します。 SELECT * FROM $ table_name WHERE BINARY LastName LIKE '$ last_name' –

+0

これは決してできません! SQLインジェクションパラダイス! PHPのSQL文字列で使用される各PHP変数は、少なくともmysql_real_escape_stringを通過する必要があります。または、PDOを使用する場合は、プリペアドステートメントを使用してください。 – dweeves

-1
WHERE BINARY LastName LIKE "O'Connor" 

を好むと思います\'がより良いかもしれないと思うが、両方ともうまくいくと思う。

0

magic_quotes_gpcが有効になっている場合は、mysql_real_escape_string()

で文字列をエスケープする必要があります(これは悪い考えです)。つまり、$ _GET、$ _POST、$ _COOKIESから集められた文字列がエスケープされます( "O'Connor" - > "O \ 'Connor")。

データを保存した後に再度取得すると、データベースから返された文字列は自動的にエスケープされません。あなたは "O'Connor"を取り戻すでしょう。したがって、mysql_real_escape_string()を通す必要があります。

関連する問題