非推奨:mysql_connect()


95

この警告が表示されますが、プログラムはまだ正しく実行されています。

MySQLコードがPHPでメッセージを表示しています。

非推奨:mysql_connect():mysql拡張は非推奨であり、将来的には削除される予定です:2行目のC:\ xampp \ htdocs \ task \ media \ new \ connect.inc.phpの代わりにmysqliまたはPDOを使用してください

私のconnect.inc.phpページは

<?php
  $connect = mysql_connect('localhost','root','');
  mysql_select_db('dbname');
?>

これはどういう意味ですか、どうすればメッセージを削除できますか?


5
mysqli_ *関数またはPDOを使用してください!!!!
クリッシュR 14

重複の可能性があります。stackoverflow.com/questions/13944956/...
desbest

3
関連する更新、mysql_ *関数はPHP7で削除されました。代わりにMySQLiを使用してください。
techdude 2015

回答:


141

あなたの問題にはいくつかの解決策があります。

MySQLiでの方法は次のようになります。

<?php
$connection = mysqli_connect('localhost', 'username', 'password', 'database');

データベースクエリを実行することも簡単で、以前の方法とほぼ同じです。

<?php
// Old way
mysql_query('CREATE TEMPORARY TABLE `table`', $connection);
// New way
mysqli_query($connection, 'CREATE TEMPORARY TABLE `table`');

mysql_ *からの警告を含む、すべての非推奨の警告をオフにします。

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

置換する必要がある正確なファイルと行の場所は "/System/Startup.php> line:2" error_reporting(E_All);です。error_reporting(E_ALL ^ E_DEPRECATED);に置き換えます。


33

mysql_connectの前に「@」を追加することで警告を削除できます。

@mysql_connect('localhost','root','');

しかし、警告が伝えているように、mysql拡張機能は将来削除されるため、mysqliまたはPDOを使用してください。


1
私はあなたが悪い習慣をずっと自分で使っているだけでなく、他の人にそうするように言っていることさえ知っています
あなたの常識

29
警告を隠すことは良いことです。それはプログラムを動かし続けます、そしてmysql_xxxx関数は現在のバージョンでうまく機能するので今問題がないことを意味します。廃止されたことについてあなたが言っているのはエラーメッセージの一部なので、繰り返すのは賢明ではありません。誰もがそれが非推奨であることを見ることができます、はい、ありがとう、次にお願いします。将来、mysql関数呼び出しは明らかに置き換えられます。それまでは、警告を非表示にすることは、mysql_xxx呼び出しをバックグラウンドで他の何かと黙って置き換えている間、サイトが動作できるようにするための実用的なアドバイスです。迷信にならないでください。
dkellner 2014

5
ここに信じられないほど役立つコメントがあります。非推奨の警告を残して、ライブコードを壊してください。いいですね。もちろん、警告を非表示にするのは理想的ではありませんが、コードを正常に機能させるために、非表示にする必要があります。優れた開発者は、非推奨のコードを追跡し、将来の更新のためにそれをスケジュールします。
sturrockad

1
エラー/警告の抑制はこれが修正される方法ではありません-運用サーバーのユーザーに未加工の警告/エラーが表示されている場合、それは間違っています-運用サーバーしかなく、テスト用の開発環境がない場合、間違って再実行-プロダクションにリリースする前に開発のエラー/警告を修正しない場合、最も間違って実行しています
HorusKol

1
@sturrockad 優れた開発者であれば、エラーをより適切に処理できたので、エラーは公開されず、開発者が確認できるようにバックエンドにログインするだけです。エラーメッセージを公開してライブコードを壊している場合は、おそらくWebサイト全体を再考する必要があります。これは警告を抑制する有効な言い訳にはなりません。
アニムソン

10

これだけの非推奨メッセージを抑制するには(そしてコード内の他の非推奨についての情報を得るには)、接続の前に@を付けます。

<?php
$connect = @mysql_connect('localhost','root','');
mysql_select_db('dbname');
?> 

PHP 7以降では、これは機能しないことに注意してください(したがって、私の反対票)。それは「解決策」ではありません...
グウィネス・ルウェリン

OPは、PHP 5.5および5.6でのみ生成される非推奨メッセージに関するものです。ソリューションは、OPメッセージが表示される環境内にあります。
IanMcL

8

PHP 5.5.xで廃止された機能

元MySQLの拡張が廃止され、生成されE_DEPRECATEDたデータベースへの接続時にエラーが。代わりに、** MYSQLiまたはPDO_MySQL拡張機能**を使用してください

構文:

<?php
  $connect = mysqli_connect('localhost', 'user', 'password', 'dbname');

また、すべてのmysql_*関数をmysqli_*関数に置き換えます

の代わりに

<?php
 $connect = mysql_connect('localhost','root','');
  mysql_select_db('dbname');
?> 

6

この警告は、新しい拡張機能が表示されたために表示されます。まだ古いものを使用できると思いますが、場合によっては不可能です。

データベースとの接続方法を紹介します。変数の値を変更するだけです。

私の接続ファイル:connection.php

<?php    
 $host='IP or Server Name (usually "localhost") ';
 $user='Database user';
 $password='Database password';
 $db='Database name';

 //PHP 5.4 o earlier (DEPRECATED)
 $con = mysql_connect($host,$user,$password) or exit("Connection Error");
 $connection = mysql_select_db($db, $con);

 //PHP 5.5 (New method)
 $connection =  mysqli_connect($host,$user,$password,$db);
?>

クエリを実行すると、拡張子も変更されます。

クエリファイル:"example.php"

<?php
 //First I call for the connection
 require("connection.php");

 // ... Here code if you need do something ...

 $query = "Here the query you are going to perform";

 //QUERY PHP 5.4 o earlier (DEPRECATED)
 $result = mysql_query ($query) or exit("The query could not be performed");

 //QUERY PHP 5.5 (NEW EXTENSION)
 $result = mysqli_query ($query) or exit("The query could not be performed");    
?>

この方法はMySQLの改良された拡張機能を使用していますが、PDO(PHPデータオブジェクト)を使用できます

最初の方法はMySQLデータベースでのみ使用できますが、PDOはさまざまなタイプのデータベースを管理できます。

例を挙げますが、最初のものだけを使用する必要があるので、エラーが発生した場合は修正してください。

私のPDO接続ファイル:"PDOconnection.php"

<?php
 $hostDb='mysql:host= "Here IP or Server Name";dbname="Database name" ';
 $user='Database user';
 $password='Database password';

 $connection = new PDO($hostDb, $user, $password);
?>

クエリファイル(PDO):"example.php"

<?php
 $query = "Here the query you are going to perform";
 $result=$connection->$query;
?>

最後に、もちろん警告を非表示にすることもできますが、エラーが発生した場合に時間を節約するのに役立ちます(私たち全員が理論を知っていますが、長時間作業する場合もあります)。 。脳はありません^^)。





1

一般に「非推奨」の警告は、古い機能を使用しようとしていることを意味します。コードが機能しないことを意味するわけではありませんが、リファクタリングを検討する必要があります。

あなたの場合、関数mysql_は非推奨です。これについてもっと知りたい場合は、すでに良い説明があります:なぜPHPでmysql_ *関数を使用すべきではないのですか?


1
<?php 
$link = mysqli_connect('localhost','root',''); 
if (!$link) { 
    die('Could not connect to MySQL: ' . mysqli_error()); 
} 
echo 'Connection OK'; mysqli_close($link); 
?>

これはあなたの問題を解決します。


1

PDOクラスはこれらのメソッドを置き換えます。MysqlまたはMariaDBの例:

$BDD_SQL = new PDO('mysql:host='.BDD_SQL_SERVER.';dbname='.BDD_SQL_BASE.';charset=utf8', 
        BDD_SQL_LOGIN, BDD_SQL_PWD, 
        array(
          PDO::ATTR_EMULATE_PREPARES => false,
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //launch exception if error
          PDO::ATTR_DEFAULT_FETCH_MODE=> PDO::FETCH_ASSOC
                ));

ソース:PDOクラス


1

あなたがコーディングをしたなら

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 

これは良いオプションですが、始めの場合は間違いなくmysqliを使用する必要があります。


1

さて、私は今日新しいホスティングに移動したときにそのようなメッセージに直面しました!とにかく私は「mySQL」を「mySQLi」に変更しようとしましたが、機能していませんので、これを行いました:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
# Turn off all error reporting
error_reporting(0);
$connect_myconn = "Database Connection";
$hostname_myconn = "localhost";
$database_myconn = "db name";
$username_myconn = "user name";
$password_myconn = "pass";
$myconn = mysql_connect($hostname_myconn, $username_myconn, $password_myconn) or die("<h1 style=margin:0;>A MySQL error has occurred.</h1><p><b>Your Query:</b> " . $connect_myconn . "<br /> <b>Error Number:</b> (" . mysql_errno() . ")</p>" . mysql_error());
mysql_select_db($database_myconn, $myconn);
?>

トリックはエラー報告をオフに設定することです:)

# Turn off all error reporting
error_reporting(0);

PHP 7以降の場合は、代わりに次のコードを使用できます。

ini_set('display_errors', 0);
ini_set('log_errors', 1);

ありがとう


1
こんにちは、はい、PHP 7以降ではこれを使用できますini_set('display_errors', 0); ini_set('log_errors', 1);。上記の答えを更新します。ありがとう。
Mizo Games

-3

これをphpページに配置します。

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 

PHP 7以降では、これは機能しないことに注意してください(したがって、私の反対票)。それは「解決策」ではありません...
グウィネス・ルウェリン

-5

追加 @作品をしてくれます!

私はテストしました error_reporting(E_ALL ^ E_DEPRECATED);


1
エラーを解決するのではなく、メッセージを非表示にするだけです
Leonardo Sapuy

PHP 7以降では、これは機能しないことに注意してください(したがって、私の反対票)。それは「解決策」ではありません...
グウィネス・ルウェリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.