サーバーで文字列をDBに挿入してからmysql_real_escape_string
印刷すると、すべて問題なく、mysqlが自動ストリップスラッシュを作成するように見えます。たとえば、保存してtes't
から印刷します。tes't
ただし、php 4.2 がインストールされているローカルホストではtes\'t
、同じコードを使用します。mysqlの謎は?? どのようにデータを挿入して選択し、データを安全かつきれいにデータベースに保存する必要があるかを知りたいです。それは私を本当に混乱させるからです!
2021 次
2 に答える
1
魔法の引用符がオンになっている可能性があります。これを回避しようとするのではなく、単にオフにする必要があります。サーバーにアクセスできない場合でも、グローバルな方法で処理する必要があります。例えば:
if ( ( function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ) || ini_get('magic_quotes_sybase') ) {
foreach ( $_POST as $k => $v ) { $_POST[$k] = stripslashes($v); }
foreach ( $_GET as $k => $v ) { $_GET[$k] = stripslashes($v); }
foreach ( $_COOKIE as $k => $v ) { $_COOKIE[$k] = stripslashes($v); }
}
これをコードの先頭に置くことで、マジック クォートが毎回確実に処理されるようになります。つまり、マジック クォートを処理する必要がある場所を追跡する必要がなくなります。
ここのメモの詳細: http://www.php.net/manual/en/function.get-magic-quotes-gpc.php
于 2012-06-19T12:57:57.587 に答える
1
これは、PHP のマジック クォートの設定に依存する可能性が高く、MySQL のミステリーというよりは PHP のミステリーです :) を使用する代わりにmysql_real_escape_string()
、より一般的な関数を使用できます。
function escape($s)
{
if (get_magic_quotes_gpc()) $s=stripslashes($s);
return mysql_real_escape_string($s);
}
このコードを使用して、オプションがアクティブであるかどうかを確認し、最初のストリッピングを実行します。
于 2012-06-19T12:52:38.403 に答える