mysql_real_escape_stringは、コードを別のサーバーに移動したときに動作を停止しました
-
26-10-2019 - |
質問
次のコードは、ローカル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()
全体的に。
他のヒント
あなたはおそらく「魔法の引用」を考えています
この関数はPHP 5.3で非推奨されていますhttp://php.net/manual/en/function.mysql-escape-string.php
コードを書き換え、理想的にはPDOを今後使用し、準備したステートメントを使用する必要があります。
素早い回答:
最初にデータベースに接続します
次に、mysql_real_escape_stringを使用します。
その逆ではありません......