致命错误:未捕获错误:调用未定义函数mysql_connect()


73

我正在尝试与XAMPP和MySQL服务器进行简单连接,但是每当我尝试输入数据或连接到数据库时,都会出现此错误。

致命错误:未捕获错误:调用C:\ xampp \ htdocs \ register.php:22中未定义的函数mysql_connect()
堆栈跟踪:#0 {main}抛出于22行的C:\ xampp \ htdocs \ register.php中

第22行的示例:

$link = mysql_connect($mysql_hostname , $mysql_username);

8

<?php $ mysql_hostname =“我的IP”; $ mysql_username =“ root”; $ mysql_password =“”; $ mysql_database =“警察”; $ db = mysql_connect($ mysql_hostname,$ mysql_username)或die(“ SQL连接问题。主机名,用户名或密码错误!”); mysql_select_db($ mysql_database,$ db)或die(“无法连接到数据库!检查凭证”); mysql_connect($ mysql_hostname,$ mysql_username)?>
Demeteor

将mysql_connect($ mysql_hostname,$ mysql_username)更改为mysql_connect($ mysql_hostname,$ mysql_username,$ mysql_password)。另外,切换到PDO或MySQLi!
克里斯·G

1
万一我在phpmyadim上不使用密码?(尝试执行所有这些远程操作只会导致我需要手机能够连接到数据库)
Demeteor

如果你遇到这个错误与传统,在你使用这个config/database.php'dbdriver' => 'mysqli',(其他城市mysqlmysqli
ProfNandaa

Answers:


115

mysql_* PHP 7中已删除函数。

您可能在XAMPP中具有PHP 7。现在,您有两种选择:MySQLiPDO

另外,是一个关于PDO的漂亮Wiki页面。


37

您可以使用mysqli_connect($mysql_hostname , $mysql_username)代替mysql_connect($mysql_hostname , $mysql_username)

mysql_*自PHP 7起,已删除函数。您现在有两个选择:MySQLiPDO


1
但是,可能需要对代码进行其他更改。
ceejayoz

1
在Ubuntu 16.04上,这需要php7.0-mysql软件包。正如@ceejayoz所说,实际上需要进行一些API更改,不仅要更改函数名称,还要更改其参数顺序。非常沮丧。
Drew Noakes

一个粗糙的,但它对我
有用

23

建议使用MySQLi或PDO扩展。不建议将旧的mysql扩展用于新开发,因为PHP 5.5.0中已弃用该扩展,而PHP 7中已将其删除。

PHP提供了三种不同的API连接到MySQL。下面我们显示了mysql,mysqli和PDO扩展提供的API。每个代码段都使用用户名“ username”和密码“ password”创建到在“ example.com”上运行的MySQL服务器的连接。然后运行查询来迎接用户。

Example#1比较三个MySQL API

<?php
// mysqli
$mysqli = new mysqli("example.com", "username", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'username', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

// mysql
$c = mysql_connect("example.com", "username", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>

我建议您同时尝试MySQLi和PDO,并找出您喜欢的API设计。

阅读选择API为什么我不应该在PHP中使用mysql_ *函数?


12

正如其他答案所暗示的那样……某人(无论出于何种原因)认为升级PHP时您的旧代码不起作用,因为他比您更了解并且不关心代码的功能或代码的简单性你升级。

好吧,如果您不能在一夜之间升级项目,则可以

将您的PHP版本降级为任何可用的版本

要么...

使用填充程序(一种polyfill),例如https://github.com/dshafik/php7-mysql-shimhttps://github.com/dotpointer/mysql-shim,然后include_once("choice_shim.php");在代码中的某个位置找到位置

这将使您的旧PHP代码保持正常运行,直到您有意进行更新为止。


10

mysql_* PHP 7中已删除函数。

现在,您有两种选择:MySQLiPDO

以下是迁移到MySQLi替代方案之前(-)和之后(+)的比较,直接从工作代码中获取:

-if (!$dbLink = mysql_connect($dbHost, $dbUser, $dbPass))
+if (!$dbLink = mysqli_connect($dbHost, $dbUser, $dbPass))

-if (!mysql_select_db($dbName, $dbLink))
+if (!mysqli_select_db($dbLink, $dbName))

-if (!$result = mysql_query($query, $dbLink)) {
+if (!$result = mysqli_query($dbLink, $query)) {

-if (mysql_num_rows($result) > 0) {
+if (mysqli_num_rows($result) > 0) {

-while ($row = mysql_fetch_array( $result, MYSQL_ASSOC )) {
+while ($row = mysqli_fetch_array( $result, MYSQLI_ASSOC )) {

-mysql_close($dbLink);
+mysqli_close($dbLink);



-1

对于mysqli,您可以使用:

$ db = ADONewConnection('mysqli');

……

$ db-> execute(“ set names'utf8'”);

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.