0

サーバーで文字列をDBに挿入してからmysql_real_escape_string印刷すると、すべて問題なく、mysqlが自動ストリップスラッシュを作成するように見えます。たとえば、保存してtes'tから印刷します。tes'tただし、php 4.2 がインストールされているローカルホストではtes\'t、同じコードを使用します。mysqlの謎は?? どのようにデータを挿入して選択し、データを安全かつきれいにデータベースに保存する必要があるかを知りたいです。それは私を本当に混乱させるからです!

4

2 に答える 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 に答える