[解決済み] mysql 拡張は非推奨で、将来的に削除されます: 代わりに mysqli か PDO を使ってください [重複] 。
質問
PHPからMySQLサーバーに接続しようとすると、以下のエラーが表示されます。
非推奨です。mysql 拡張モジュールは非推奨で、将来的に削除される予定です。代わりに mysqli または PDO を使ってください。
参照行のコードは
mysql_connect($server, $username, $password);
引数が正しいことは確かで、この正確なコードは何年も問題なく動作しています。 実際、私はこのコードをPHPのよく知られたチュートリアルから入手しました。
-
なぜこのようなことが起こるのでしょうか?
-
どうすれば直るのですか?
-
を設定することで、非推奨のエラーを抑制することが可能であることは理解しています。
error_reporting
でphp.ini
を除外するためにE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
そうすると、どうなるんですか?
解決方法は?
-
<ブロッククオート
なぜ、このようなことが起こるのでしょうか?
全体の
ext/mysql
という接頭辞を持つすべての関数を提供する PHP 拡張モジュールです。mysql_
であった。 PHP v5.5.0 で正式に非推奨となりました。 と PHP v7 で削除されました。 .元々は PHP v2.0 (1997年11月) で MySQL v3.20 用に導入されたもので、2006年以降新しい機能は追加されていない。 新機能の欠如と相まって、複雑なセキュリティ脆弱性の中でこのような古いコードを維持することは困難である。
2011年6月以降、新しいコードに使用しないよう、マニュアルに警告が記載されています。
-
どうすれば直るのでしょうか?
エラーメッセージが示すように、他に2つのMySQL拡張機能があるので、検討してみてください。 MySQLi と PDO_MySQL の代わりに使用することができます。
ext/mysql
. どちらも PHP コアには v5.0 から入っているので、もしこれらの非推奨エラーが発生するバージョンを使っているのなら、ほとんど間違いなくすぐに、つまりインストール作業をすることなく使い始めることができます。トランザクション、ストアドプロシージャ、プリペアドステートメントを API でサポートする (これにより 最良の方法 を打ち負かすために SQLインジェクション攻撃 ). PHP開発者のUlf Wendelは、次のように書いています。 機能の徹底比較 .
Hashphp.orgでは からの移行に関する優れたチュートリアルです。
ext/mysql
からPDO . -
を設定することで、非推奨のエラーを抑制することが可能であると理解しています。
error_reporting
でphp.ini
を除外するためにE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
そうすると、どうなるんですか?
はい、このようなエラーメッセージを抑制して、従来の
ext/mysql
という拡張子を当分の間使用します。 しかし このようなことはしないでください。 -これは、この拡張モジュールが将来のバージョンの PHP にバンドルされない可能性があるという開発者からの最終的な警告です (実際、すでに述べたように PHP v7 からは削除されています)。 代わりに、この機会にアプリケーションを移行する必要があります。 現在 手遅れになる前に。また、このテクニックは すべて
E_DEPRECATED
に関するものだけでなく、メッセージのext/mysql
そのため、あなたのアプリケーションのコードに影響を与えるような PHP の変更に気づかない可能性があります。 もちろん、問題の式で発生するエラーだけを抑制することは可能です。 エラー制御演算子 -つまり、該当する行の先頭に@
-を抑制することができます。 すべて のみならず、その式で発生するエラーE_DEPRECATED
のものがあります。
どうすればいいのでしょうか?
-
新しいプロジェクトを開始します。
があります。 理由がない を使用します。
ext/mysql
-その代わりに、より現代的な他の拡張機能を選択し、それらが提供する恩恵を享受してください。 -
に依存しているレガシーコードベースがあります。
ext/mysql
.リグレッションテストを実施するのが賢明でしょう。 何でも (特に PHP のアップグレード) は、影響が及ぶ可能性のある領域をすべて特定し、それぞれについて計画を立て、ステージング環境でソリューションを徹底的にテストするまでは、行わないでください。
-
良いコーディングプラクティスに従って、あなたのアプリケーションは疎結合/モジュール方式で開発され、データベースアクセスメソッドはすべて1つの場所で自己完結しており、新しい拡張機能の1つと簡単に交換することができます。
30分ほどかけて、このモジュールを他の最新の拡張機能を使用するように書き直し、徹底的にテストしてください。 徹底的にテストしてください。後でさらなる改良を加えて、それらが提供する利点を享受することができます。
-
データベースアクセスメソッドがあちこちに散らばっていて、新しい拡張機能に簡単に交換することができない。
現時点で本当にPHP v5.5にアップグレードする必要があるかどうか検討してみてください。
を置き換える計画を立て始める必要があります。
ext/mysql
また、データベースへのアクセスメソッドをよりモジュール化するためのリファクタリングの機会としても活用できます。しかし、もしあなたが 緊急 をすぐにでもアップグレードする必要がある場合、 deprecation エラーを抑制することを検討することがあります。
-
-
に依存するサードパーティプロジェクトを使用しています。
ext/mysql
.現時点で本当にPHP v5.5にアップグレードする必要があるかどうかを検討してください。
この特定の問題に関して、開発者が修正プログラム、回避策、ガイダンスを公開しているかどうかを確認し、公開していない場合は、この問題に注意を払うよう圧力をかけてください。 もし、あなたが 緊急 しかし、その前に、他に非推奨のエラーが投げられていないかどうかを確認してください。
リグレッションテストを実施することは絶対に必要です。
関連
-
[解決済み】MySQLエラー1264:カラムの範囲外の値
-
[解決済み】mysql.plugin テーブルを開くことができません。mysql_upgradeを実行して作成してください。
-
[解決済み】MySQL 派生テーブルはすべて独自のエイリアスを持つ必要があります。
-
[解決済み】MySQL エラー #1133 - ユーザー テーブルに一致する行が見つかりません。
-
[解決済み] "sqlstate[23000]: 整合性制約違反 "を有効な制約で
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] whereステートメントによるmysqlの一括更新
-
[解決済み] MySQLで "no "キーワードは何に使うのですか?
-
[解決済み] DEFAULT NULLとCHECKBOX NULL mysqlの違いは何ですか?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mysqladmin: 'localhost'でのサーバーへの接続に失敗しました。
-
コマンドでmysqlに接続中、'mysql'が内部または外部コマンドとして認識されない エラーは解決されました。
-
[解決済み】MySQLを使用してランダムでユニークな8文字の文字列を生成する方法
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] 非推奨:mysql_real_escape_string()。mysql 拡張モジュールは非推奨で、将来的に削除される予定です: mysqli あるいは PDO を使ってください [重複] 。
-
[解決済み] MySQL エラー 1241。オペランドには1つのカラムが含まれている必要があります。
-
[解決済み] 「他のデータベースへのクエリを無視する」コマンドライン
-
[解決済み] MySQLの更新datetimeフィールド
-
[解決済み] 1行目の列 'id' に不正な整数値 '' があります。
-
[解決済み] 非推奨: mysql_connect() [重複].