2016-11-17 2 views
1

この質問は、私はvarcharのようなMySqlデータベースのテーブルフィールドを持っています。そのフィールドには、その値に一重引用符が含まれることがあります。上記のMySQL Workbenchでは動作しません、もちろんPHPでMySql関数を使用しない文字をエスケープする

select my_field 
from my_table 
where my_field = 'xxx'rrr'; 

は、私は次のようにいくつかのクエリを実行する必要があります。

私が試してみました:

select my_field 
from my_table 
where my_field = 'xxx''rrr'; 

select my_field 
from my_table 
where my_field = 'xxx\'rrr'; 

を彼らの両方は、MySQL Workbenchのから動作するようです。

しかしながら、これらのクエリは、細工およびPHPアプリケーションで実行されます。 警告が表示されるか、上記の方法を使用できるかどうかを知りたいですか? MySql関数を使用せずに一重引用符をエスケープする正しい方法は何ですか?

+1

は正しい方法ではありません*エスケープする代わりにパラメータを使用する*ではありませんか?しかし、MySql Workbenchのように、データを挿入するときには、あなたが正しいことを知っていますか? –

答えて

1

あなたは文字をエスケープすることができ、いくつかの方法があります。どちらの提案も正しいです。ここでofficial documentationが言うことだ:

Aを「」のように記述することができる「で囲んだ文字列内で」:文字列内の引用符を含めるには、いくつかの方法があります

A「」のように記述することができる「で囲んだ文字列内で」。

は、エスケープ文字で引用符の前には()。

A「で囲んだ文字列内では、 『特別な治療を必要としないと倍増したり、エスケープする必要はありません。同様に、』と引用符で囲まれた文字列は内部で」特別な治療を必要としません。

質問に答えるには、上記の方法のいずれかを実行している限り、クエリやエスケープの文字をエスケープする方法はありません。


ただし、phpでクエリを作成する場合は、上記のいずれも行う必要はありません。コードがこれを処理します。あなたがそれを好む必要があります。また、MySQLi使用することができ

$some_variable = "'a'string'with'single-quotes'"; 
$query = "SELECT my_row FROM my_table WHERE some_column = :some_value"; 
$values = array(
    "some_value" => $some_variable, 
); 
$result = $db->get($query, $values)->fetch(); 

:ここPDOを使用した例です。

+0

私の答えが更新されました。コードの小さな間違いに気づいた。 – Chris

2

バックスラッシュの作品でエスケープ。 これは私のプロジェクトの一つの例である:

select * 
from articles 
where title like '%O\'Neill%' 

たぶん、あなたはちょうどあなたがあなたが見ることができないいくつかのスペースを持っている場合にlikeを使用する必要があります。

編集:バックスラッシュでエスケープしても、正しい方法ではありません。

1

はまた、PHPで、あなたはこのような二重引用符ができます

where my_field = "xxx'rrr"; 
+0

はい。しかし、私のフィールドは、二重引用符を含むこともあります。残念ながら... – JVerstry

関連する問題