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');
?>
这是什么意思,我该如何消除该消息?
#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
评论
使用mysqli_ *函数或PDO !!!!可能重复。 stackoverflow.com/questions/13944956 / ...
相关更新,mysql_ *函数已在PHP7中删除。请改用MySQLi。
为什么不应该在PHP中使用mysql_ *函数的可能重复项?