1. ホーム
  2. mysql

[解決済み] mysql 拡張は非推奨で、将来的に削除されます: 代わりに mysqli か PDO を使ってください [重複] 。

2022-02-05 08:06:34

質問

PHPからMySQLサーバーに接続しようとすると、以下のエラーが表示されます。

非推奨です。mysql 拡張モジュールは非推奨で、将来的に削除される予定です。代わりに mysqli または PDO を使ってください。

参照行のコードは

mysql_connect($server, $username, $password);

引数が正しいことは確かで、この正確なコードは何年も問題なく動作しています。 実際、私はこのコードをPHPのよく知られたチュートリアルから入手しました。

  1. なぜこのようなことが起こるのでしょうか?

  2. どうすれば直るのですか?

  3. を設定することで、非推奨のエラーを抑制することが可能であることは理解しています。 error_reportingphp.ini を除外するために E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED
    
    

    そうすると、どうなるんですか?

解決方法は?

  1. <ブロッククオート

    なぜ、このようなことが起こるのでしょうか?

    全体の ext/mysql という接頭辞を持つすべての関数を提供する PHP 拡張モジュールです。 mysql_ であった。 PHP v5.5.0 で正式に非推奨となりました。 PHP v7 で削除されました。 .

    元々は PHP v2.0 (1997年11月) で MySQL v3.20 用に導入されたもので、2006年以降新しい機能は追加されていない。 新機能の欠如と相まって、複雑なセキュリティ脆弱性の中でこのような古いコードを維持することは困難である。

    2011年6月以降、新しいコードに使用しないよう、マニュアルに警告が記載されています。

  2. どうすれば直るのでしょうか?

    エラーメッセージが示すように、他に2つのMySQL拡張機能があるので、検討してみてください。 MySQLi PDO_MySQL の代わりに使用することができます。 ext/mysql . どちらも PHP コアには v5.0 から入っているので、もしこれらの非推奨エラーが発生するバージョンを使っているのなら、ほとんど間違いなくすぐに、つまりインストール作業をすることなく使い始めることができます。

    トランザクション、ストアドプロシージャ、プリペアドステートメントを API でサポートする (これにより 最良の方法 を打ち負かすために SQLインジェクション攻撃 ). PHP開発者のUlf Wendelは、次のように書いています。 機能の徹底比較 .

    Hashphp.orgでは からの移行に関する優れたチュートリアルです。 ext/mysql からPDO .

  3. を設定することで、非推奨のエラーを抑制することが可能であると理解しています。 error_reportingphp.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にアップグレードする必要があるかどうかを検討してください。

    この特定の問題に関して、開発者が修正プログラム、回避策、ガイダンスを公開しているかどうかを確認し、公開していない場合は、この問題に注意を払うよう圧力をかけてください。 もし、あなたが 緊急 しかし、その前に、他に非推奨のエラーが投げられていないかどうかを確認してください。

    リグレッションテストを実施することは絶対に必要です。