我收到此警告,但程序仍能正常运行。

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


这是什么意思,我该如何消除该消息?

评论

使用mysqli_ *函数或PDO !!!!

可能重复。 stackoverflow.com/questions/13944956 / ...

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

为什么不应该在PHP中使用mysql_ *函数的可能重复项?

#1 楼

有几种解决方案可以解决您的问题。

使用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>第2行” error_reporting(E_All);替换为error_reporting(E_ALL ^ E_DEPRECATED);

#2 楼

您可以通过在mysql_connect之前添加“ @”来消除警告。将来删除。

评论


我发现您不仅在整个过程中都在使用不良做法,甚至还告诉其他人这样做

–您的常识
2014年4月7日在19:11

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

– dkellner
2014年8月4日在22:54



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

–sturrockad
15年1月8日在11:23

错误/警告抑制不是固定的解决方法-如果您在生产服务器上向用户显示原始警告/错误,那么您做错了-如果您只有生产服务器并且没有开发环境可进行测试,这样做是错误的-如果您在发布产品之前没有修正开发中的错误/警告,那您做的就是最错误的

–HorusKol
16-2-4在5:11



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

– animuson♦
17年5月26日在14:28

#3 楼

若要仅取消弃用消息(并随时了解代码中的其他弃用消息),可以在连接前面加上@:

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


评论


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

– Gwyneth Llewelyn
19-09-24在12:05

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

– IanMcL
19-09-25在9:35

#4 楼

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

现在不推荐使用原始的MySQL扩展,并且在连接数据库时会产生E_DEPRECATED错误。而是使用** MYSQLi或PDO_MySQL扩展。**

语法: br />
而不是

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


#5 楼

之所以显示此警告,是因为出现了新的扩展名。与数据库。您只需要更改变量的值即可。

我的连接文件: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”对象)。

第一种方法只能用于MySQL数据库,但是PDO可以管理不同类型的数据库。

我将举一个例子,但这是必须说我只使用第一个,所以如果有任何错误,请纠正我。

我的PDO连接文件:“ PDOconnection.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");    
?>


查询文件(PDO):“ example.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);
?>


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

#6 楼

这是因为您使用的是PHP 5.5,或者您的Web服务器将已升级到5.5.0。

从5.5.0版开始不推荐使用mysql_*函数。



Source

#7 楼

mysql_ *从PHP v5.5.0开始正式弃用,以后将被删除。

使用mysqli_ *函数或pdo

阅读Oracle转换为MySQLi

#8 楼

它只是一个警告,它告诉您开始使用更新的方法连接到您的数据库,例如pdo对象

您正确执行操作--net-25338

手册在这里

http://www.php.net/manual/zh/book.pdo。 php

#9 楼

通常,警告“不赞成使用”表示您正在尝试使用过时的功能。这并不意味着您的代码将无法工作,但是您应该考虑重构。

您不赞成使用mysql_函数。如果您想了解更多信息,这里已经有很好的解释:为什么我不应该在PHP中使用mysql_ *函数?

#10 楼

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


这将解决您的问题。

#11 楼

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类

#12 楼

如果您已完成编码,则

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


是一个不错的选择,但是如果您刚开始,那么绝对应该使用mysqli。

#13 楼

好吧,今天当我搬到新主机时,我只是面对这样的消息!无论如何,我试图将“ 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);


感谢

评论


嗨,是的,对于PHP 7+,您可以使用此ini_set('display_errors',0); ini_set('log_errors',1);。我将更新上面的答案。谢谢。

– Mizo Games
19-09-25在15:42

#14 楼

将此放在您的php页面中。

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


评论


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

– Gwyneth Llewelyn
19-09-24在12:06

#15 楼

添加一个@对我有用!

我用error_reporting(E_ALL ^ E_DEPRECATED);测试了

评论


您没有解决错误,只是在隐藏消息

–莱昂纳多·萨普(Leonardo Sapuy)
15年7月23日在19:35

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

– Gwyneth Llewelyn
19-09-24在12:06