2012-04-04 10 views
0

mysql_real_escape_string($ value)を実行するとこのエラーが発生します。 mysql接続が存在するかどうかをプログラムでどのように判断しますか?

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to MySQL server on 'localhost' (10061) in ...

は、私は誰かが再びその道を行く場合は、この

class escaper 
{ 
    function __get($value) 
    { 
    //in order for this to work properly, I must have a live connection to mysql 
     return mysql_real_escape_string($value); 
    } 
} 

/*

//sample usage 
$safe = new escaper; 
$name = "O'Reilly"; 
echo $safe->$name 

のような素敵なクラスに機能を包まれ、私はそれが先行しましょうそれはそうです!私はPDOとパラメータ化されたクエリを使用すべきであり、上記の方法はそれほど安全ではありません。

+0

なぜ別のクラスエスケープが必要ですか?なぜdbクラスの一部になっていないのですか? –

答えて

0

どのようにプログラムでmysql接続が存在するかどうかを確認しますか?

これは必要ありません。
接続は常に存在します

エスケープはDBクラスの一部です。
データベースへの接続は、このクラスがコンストラクタで行う最初の作業です。
そして、クラス変数に格納されたリソースを接続します。
だから、この変数(easy-peasy)を使うことだけが必要です。

+0

さて、$ dbh(データベースハンドル)を手に入れたら、エスケープが機能することを確かめてください。私はそのメッセージを受け取らないでしょう。開発者がmysqlへの接続を作成する前にこの関数を使用すると、彼はその曖昧なエラーを取得します。私の目標はそれをキャッチして、開発者に優雅に表示し、$ dbhが最初に必要であることを彼に伝えることです。 mysql接続を設定する前にエスケープを使用することを開発者に推奨しません。 (たとえ彼がやりたいと思っていても、彼はどうにかしてmysql_real_escape_stringの機能を使用することはできません)実行時エラーを避けることです。 –

+0

あなたの設計は間違っています。あなたがエスケープの目的を理解していないという気持ちもあります。他の人と同様に、 –

+0

あなたはあなたのエスケープを使わないでください"あなたはエスケープの目的を理解していない"というあなたの他の所見は興味深いものですが、私はただ一つの理由でエスケープしています。 1つの方法は、すべての入力(偶数)を一重引用符で囲むことです。すべての入力を同じように処理して2次の注入を処理し、* my * SQLを実行する前にすべての$入力がmy_sql_r_e_sでエスケープされていることを確認してください。これは私が準備済みのステートメントを使用していない場合に限ります。 –