不推荐使用: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 !!!!
Krish R 2014年


3
相关更新,mysql_ *函数已在PHP7中删除。改用MySQLi。
techdude

Answers:


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','');

但正如警告所言,请使用mysqli或PDO,因为将来会删除mysql扩展名。


1
我看到您不仅在整个过程中都在使用不良做法,甚至还告诉其他人这样做
您的常识2014年

29
隐藏警告是一件好事。它使程序保持运行状态,并且mysql_xxxx函数现在意味着没有问题,因为它们在当前版本中运行良好。您所知道的不赞成使用的只是错误消息的一部分,因此重复进行这不是明智的选择。每个人都可以看到它已弃用,是的,谢谢,接下来请。将来,显然会替换mysql函数调用。在此之前,隐藏警告是允许站点运行的实用建议,而我们将在后台以其他方式静默替换mysql_xxx调用。不要迷信。
dkellner 2014年

5
这里提供了非常有用的注释。.保留不推荐使用的警告并破坏您的实时代码吗?很好。当然,隐藏警告不是理想的选择,但仍然应该这样做以使代码保持正常运行。优秀的开发人员仍然会跟踪已弃用的代码,并计划将其用于将来的更新。
sturrockad

1
错误/警告抑制不是固定的解决方法-如果您在生产服务器上向用户显示原始警告/错误,那么您做错了-如果您只有生产服务器而没有用于测试的开发环境,重新做wronger -如果你不释放到生产环境之前修正错误/开发警告,你这样做是wrongest
HorusKol

1
@sturrockad一个好的开发人员会更好地处理错误,因此它们永远不会泄漏给公众,而只会登录到后端以供开发人员查看。如果仍然通过发布错误消息来破坏实时代码,则可能应该重新考虑整个网站。这不是抑制警告的有效借口。
animuson

10

要单独抑制此弃用消息(并随时了解代码中的其他弃用情况),可以在连接前面加上@ ::

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

请注意,在PHP 7+中,它将不再起作用(因此我不赞成);这不是一个“解决方案” ...
Gwyneth Llewelyn

OP关于仅由PHP 5.5和5.6生成的弃用消息。该解决方案位于显示OP消息的环境中。
IanMcL

8

PHP 5.5.x中不推荐使用的功能

原来的MySQL扩展现在已经过时,并会产生E_DEPRECATED连接到数据库时的错误。相反,请使用** MYSQLiPDO_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;
?>

最后,请说当然可以隐藏警告,但这不是一个好主意,因为如果发生错误,它可以在将来帮助您节省时间(我们所有人都知道该理论,但是如果您有时工作很多小时。大脑不在那儿^^)。


4

那是因为您使用的是PHP 5.5,否则您的网络服务器将被升级到5.5.0。

mysql_*5.5.0版开始不推荐使用该功能

在此处输入图片说明

Source





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+,您可以使用this ini_set('display_errors', 0); ini_set('log_errors', 1);。我将更新上面的答案。谢谢。
Mizo Games

-3

把它放在你的PHP页面。

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

请注意,在PHP 7+中,它将不再起作用(因此我不赞成);这不是一个“解决方案” ...
Gwyneth Llewelyn

-5

@为我添加作品!

我测试了 error_reporting(E_ALL ^ E_DEPRECATED);


1
您没有解决错误,只是隐藏了消息
Leonardo Sapuy 2015年

请注意,在PHP 7+中,它将不再起作用(因此我不赞成);这不是一个“解决方案” ...
Gwyneth Llewelyn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.