mysql_real_escape_stringは、コードを別のサーバーに移動したときに動作を停止しました

StackOverflow https://stackoverflow.com/questions/8808588

質問

次のコードは、ローカルXAMPPインストール(Windows 7)で完全に正常に機能しますが、Win2K8 R2サーバーに移植すると、MySQL_REAL_ESCAPE_STRINGピースは機能しません。私がそれをコメントアウトするとき、それは正常に機能します。これにはphp.iniファイルと関係があると確信していますが、それが何であるかを特定することはできません。おそらく私のコードは、そもそも別の方法で書かれているはずです。

function add_asset($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $asset_value, $purchase_date) {
    global $db;
    $asset_desc = mysql_real_escape_string($asset_desc);
    $query = "INSERT INTO assets
                 (asset_ID, asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date)
              VALUES
                 (DEFAULT, '$asset_type_ID', '$org_ID', '$asset_desc', '$asset_cost', '$asset_value', '$purchase_date')";
    $add_asset = $db->exec($query);
    $last_asset_ID = $db->lastInsertId();
    return $last_asset_ID;

具体的には、レコードがmysqlに入力されると、 asset_desc フィールドは空白です。

ありがとうございました!

更新:PHPエラーログを調べた後、次のことを見つけました。

[function.mysql-real-escape-string]:ユーザーに拒否されたアクセス ''@'localhost'(パスワードを使用:いいえ)

役に立ちましたか?

解決

開発者システムのデータベースに接続するために使用している資格情報がサーバーで失敗しているように見えます。

mysql_real_escape_string() 正しく動作するためには、アクティブなMySQL接続が必要です。データベースに接続されていない場合、失敗します。

  • あなたが呼んでいるコードのどこにいてもチェックしてください mysql_connect();エラーメッセージから、開発者システムは MySQL拡張機能のランタイムデフォルト値.

  • あるいは、接続リソースにアクセスできない場合があります mysql_real_escape_string() サーバーのシステムで。から のドキュメント mysql_real_escape_string() (私の強調):

    link_identifier

    MySQL接続。リンク識別子が指定されていない場合、最後に開いたリンク mysql_connect() 想定されています。 そのようなリンクが見つからない場合、それはまるでそれを作成しようとします mysql_connect() 議論なしで呼ばれました。 接続が見つからない場合、または確立されていない場合、E_Warningレベルエラーが生成されます。

    おそらく、あなたの開発者サーバーが通話されるように構成されている可能性があります mysql_connect() 引数がない場合、MySQLデータベースサーバーへの接続を確立します。これの最も可能性の高い理由は、Dev MySQL Serverが匿名接続を許可するか、PHP.iniが有効なデフォルトの資格情報を指定することです。

    ただし、これは生産で失敗します。これは、生産MySQLサーバーが匿名接続を許可しておらず、PHP.iniでデフォルトの資格情報が指定されていないためです。

    コードに到達することが可能な状況については、コードを確認してください mysql_real_escape_string() それなし mysql_connect() 最初に呼ばれる(との接続を確立することに注意してください PDO この場合はカウントされません)。

  • PDOを使用しているため、切り替えを検討してください 準備されたステートメント, 、必要性を排除します mysql_real_escape_string() 全体的に。

他のヒント

あなたはおそらく「魔法の引用」を考えています

http://php.net/manual/en/security.magicquotes.diabling.php

この関数はPHP 5.3で非推奨されていますhttp://php.net/manual/en/function.mysql-escape-string.php

コードを書き換え、理想的にはPDOを今後使用し、準備したステートメントを使用する必要があります。

素早い回答:

最初にデータベースに接続します

次に、mysql_real_escape_stringを使用します。

その逆ではありません......

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top