2011-01-19 1 views

答えて

6

addslashesはstr_replace($str, "'", "\\'")のおおよその等価です。あなたはmysqlで'まで評価するユニコードシーケンスの任意の数でそれを迂回することができますが、addslashes()とは全く違って見えます。一方、実際の内部mysqlエスケープ関数を使用します。これは、mysqlのために何を探して修正するかを正確に知っています。 mysqlで動作するものは別のデータベースでは機能しないかもしれません。それぞれの意味や必要条件が少しずつ異なりますが、mysqlを使って作業している場合は、「実際のエスケープ文字列」があります。

+0

しかし、mysql_real_escape_Stringでaddslashesを使用することはできません。私はデータベースエントリからスラッシュを削除する必要がある場所を数回持っていました – blake305

+1

物事がエスケープされていれば、どこかにロジックのバグがあります。しかし、いいえ、addslashesは "本当のエスケープ文字列"を元に戻す可能性が高いですが、保証するものではありません。それは簡単なテストではうまくいくかもしれませんが、後であなたを燃やす可能性が非常に高いです。 –

0

そして、あなたがテーブルに引用符で囲まれていないデータを追加する場合、まだそれは可能だが、ここではすなわち

SELECT * FROM tbl WHERE id = 10 

あなたは、このIDは正確に数字

$id = intval($_GET[ 'id' ]) ; 
$query = "SELECT * FROM tbl WHERE id = {$id}" ; 
$result = mysql_query($query) ; 
// ... bla-bla 
1

これは、ときに何が起こるかであることを確認しますユニコードエンコーディングを理解する言語(またはクエリを送信する際にエンコードを混ぜる)でスラッシュを追加するだけです:http://bugs.mysql.com/bug.php?id=22243

基本的には、どのようなt彼はデータベースがエンコーディングの期間に期待しています - あなたが偶然にキャラクターの半分をエスケープしたり、エスケープされていないキャラクターの後の部分を残したりすることはありません。

関連する問題