php 弃用:mysql_connect()

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21797118/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 04:27:16  来源:igfitidea点击:

Deprecated: mysql_connect()

phpmysqlfunctiondeprecated

提问by Mubashar Ahmed Hassan

I am getting this warning, but the program still runs correctly.

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

The MySQL code is showing me a message in PHP:

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

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\task\media\new\connect.inc.php on line 2

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

My connect.inc.phppage is

我的connect.inc.php页面是

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

What does this mean and how can I eliminate the message?

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

回答by Tharindu Kumara

There are a few solutions to your problem.

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

The way with MySQLi would be like this:

MySQLi 的方式是这样的:

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

To run database queries is also simple and nearly identical with the old way:

运行数据库查询也很简单,几乎与旧方式相同:

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

Turn off all deprecated warnings including them from mysql_*:

关闭所有已弃用的警告,包括来自 mysql_* 的警告:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

The Exact file and line location which needs to be replaced is "/System/Startup.php > line: 2 " error_reporting(E_All); replace with error_reporting(E_ALL ^ E_DEPRECATED);

需要替换的确切文件和行位置是“/System/Startup.php > line: 2” error_reporting(E_All); 替换为 error_reporting(E_ALL ^ E_DEPRECATED);

回答by Rebirth

You can remove the warning by adding a '@' before the mysql_connect.

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

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

but as the warning is telling you, use mysqli or PDO since the mysql extension will be removed in the future.

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

回答by IanMcL

To suppress the deprecation message for this alone (and stay informed of other deprecations in your code) you can prefix the connect with @:

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

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

回答by Krish R

Deprecated features in PHP 5.5.x

PHP 5.5.x 中已弃用的功能

The original MySQL extensionis now deprecated, and will generate E_DEPRECATEDerrors when connecting to a database. Instead, use the **MYSQLior PDO_MySQLextensions.**

原来的MySQL扩展现在已经过时,并会产生E_DEPRECATED连接到数据库时的错误。相反,使用 ** MYSQLiPDO_MySQL扩展。**

Syntax:

句法:

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

Also, replace all mysql_*functions into mysqli_*functions

另外,将所有mysql_*功能替换为mysqli_*功能

instead of

代替

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

回答by jCastellote

This warning is displayed because a new extension has appeared. It suppouse that you still can use the old one but in some cases it′s impossible.

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

I show you how I do the connection with database. You need just change the values of the variables.

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

My connection file: connection.php

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

The extension changes too when performing a query.

执行查询时,扩展名也会发生变化。

Query File: "example.php"

查询文件:“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");    
?>

This way is using MySQL Improved Extension, but you can use PDO (PHP Data Objects).

这种方式是使用MySQL 改进的扩展,但您可以使用PDO (PHP 数据对象)

First method can be used only with MySQL databases, but PDO can manage different types of databases.

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

I'm going to put an example but it′s necessary to say that I only use the first one, so please correct me if there is any error.

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

My PDO connection file: "PDOconnection.php"

我的 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);
?>

Query File (PDO): "example.php"

查询文件 (PDO):“example.php”

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

To finish just say that of course you can hide the warning but it′s not a good idea because can help you in future save time if an error happens (all of us knows the theory but if you work a lot of hours sometimes... brain is not there ^^ ).

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

回答by Shankar Damodaran

That is because you are using PHP 5.5 or your webserver would have been upgraded to 5.5.0.

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

The mysql_*functions has been deprecated as of 5.5.0

mysql_*5.5.0 开始,这些功能已被弃用

enter image description here

在此处输入图片说明

Source

Source

回答by Simone Nigro

mysql_*, is officially deprecatedas of PHP v5.5.0 and will be removed in the future.

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

Use mysqli_*function or pdo

使用mysqli_*函数或pdo

Read Oracle Converting to MySQLi

阅读 Oracle转换为 MySQLi

回答by user1652319

Its just a warning that is telling you to start using newer methods of connecting to your db such as pdo objects

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

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

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

The manual is here

手册在这里

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

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

回答by MSadura

Warning "deprecated" in general means that you are trying to use function that is outdated. It doeasnt mean thaqt your code wont work, but you should consider refactoring.

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

In your case functons mysql_ are deprecated. If you want to know more about that here is good explanation already : Why shouldn't I use mysql_* functions in PHP?

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

回答by zubair1024

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

This will solve your problem.

这将解决您的问题。