繁体   English   中英

弃用:mysql_connect()

[英]Deprecated: mysql_connect()

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

MySQL 代码在 PHP 中向我显示了一条消息:

已弃用:mysql_connect():mysql 扩展已弃用,将来会删除:在 C:\\xampp\\htdocs\\task\\media\\new\\connect.inc.php 第 2 行中使用 mysqli 或 PDO 代替

我的connect.inc.php页面是

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

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

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

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

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

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

但是正如警告告诉您的那样,请使用 mysqli 或 PDO,因为将来会删除 mysql 扩展。

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

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

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

显示此警告是因为出现了新扩展。 假设您仍然可以使用旧的,但在某些情况下这是不可能的。

我向您展示我如何与数据库建立连接。 您只需要更改变量的值。

我的连接文件: 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;
?>

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

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

mysql_*函数已从 5.5.0 开始弃用

在此处输入图片说明

Source

mysql_*,自 PHP v5.5.0 起正式弃用,将来会被删除。

使用mysqli_*函数或pdo

阅读 Oracle转换为 MySQLi

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

http://code.tutsplus.com/tutorials/php-database-access-are-you-doing-it-correctly--net-25338

手册在这里

http://www.php.net/manual/en/book.pdo.php

警告“已弃用”通常意味着您正在尝试使用过时的函数。 这并不意味着您的代码将无法工作,但您应该考虑重构。

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

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

这将解决您的问题。

好吧,我今天刚搬到新主机时遇到了这样的消息! 无论如何,我已尝试将“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);

谢谢

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 类

如果你已经完成了编码,那么

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

是不错的选择,但如果您刚开始,那么您肯定应该使用 mysqli。

把它放在你的php页面中。

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

添加@对我有用!

我测试了error_reporting(E_ALL ^ E_DEPRECATED);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM