[PROBLEM] Deprecated: mysql_connect()

Deprecated: mysql_connect(): The mysqlextension is deprecated and will be removed in the future: use mysqli or PDOinstead in D:\ApaServ\php\includes\myfun2.php on line 17

 

Deprecated:mysql_connect(): The mysql extension is deprecated and will be removed in thefuture: use mysqli or PDO instead in D:\ApaServ\php\includes\duibifun.php online 6

这是在新版本的php中不再支持mysql_connect()这个函数,改用$link = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link));

 

 

但是这个方法不靠谱,改了之后又出现一大堆别的问题。

正确做法:代码前面加上

error_reporting(0);

这样就好了!!!!!!!!!!!!!!!!!!!

纪念php零基础的我1个半小时解决了团队一整天都没解决的问题,要不是今天就要调好交货,我怎么可能8点不到就起床了?

转载于:https://www.cnblogs.com/pengzheng/p/3633449.html

<think>好的,我现在需要帮用户解决关于mysql_connect函数被废弃的警告,并学习如何使用mysqli或PDO替代的问题。用户可能已经遇到了PHP升级后出现的Deprecated警告,所以需要快速找到替代方案。首先,我得确认用户的问题核心:替换mysql扩展为mysqli或PDO,并提供示例代码。 首先,我应该回顾一下mysql_connect被废弃的原因。PHP官方从5.5.0开始不推荐使用mysql扩展,建议使用mysqli或PDO。所以用户需要迁移到这两个扩展之一。接下来,我需要比较mysqli和PDO的优缺点,帮助用户选择适合的。比如,mysqli是MySQL专用的,支持过程化和面向对象两种方式,而PDO支持多种数据库,更适合需要跨数据库的情况。 然后,我需要提供具体的示例代码。对于mysqli,应该展示面向对象的方式和过程化方式。比如,使用mysqli_connect()函数,或者面向对象的new mysqli()。同时,要提到错误处理,比如检查连接是否成功,使用异常处理等。另外,用户可能关心如何设置连接选项,比如超时时间,这里可以引用用户提供的引用[2]中的例子,使用options方法设置超时。 对于PDO部分,需要展示如何创建PDO实例,设置错误模式为异常,以及预处理语句的使用。用户可能还关心安全性,比如防止SQL注入,这时候要提到预处理参数化查询的重要性,而引用[1]中提到的mysqli_real_escape_string虽然有用,但预处理是更推荐的方式。 另外,用户可能需要知道如何迁移现有代码。比如,将mysql_connect替换为mysqli_connect,以及相关的查询函数如mysql_query改为mysqli_query或者使用预处理语句。还要注意旧代码中可能存在的mysql_error()等函数也需要替换。 可能还需要提醒用户注意数据库连接的持久化、字符集设置等细节。比如,PDO的DSN中可以指定字符集,而mysqli可以在连接后执行SET NAMES语句。 最后,生成相关问题的时候,应该覆盖常见的使用场景,比如错误处理、事务处理、连接池等,帮助用户进一步深入学习。同时确保回答结构清晰,分点说明mysqli和PDO的使用方法,并给出代码示例,让用户能一步步跟着操作。</think>### 解决`mysql_connect`被废弃的警告及替代方案 PHP 5.5.0 起,`mysql_connect`函数被标记为废弃(Deprecated),建议改用`mysqli`或`PDO_MySQL`扩展。以下是具体替代方案和示例: --- ### 一、使用`mysqli`扩展 #### 1. 面向对象方式 ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "连接成功"; ?> ``` #### 2. 过程化方式 ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // 检查连接 if (!$conn) { die("连接失败: " . mysqli_connect_error()); } echo "连接成功"; ?> ``` #### 3. 设置超时选项(引用用户提供的示例[^2]) ```php $mysqli = mysqli_init(); $mysqli->options(0 /*MYSQL_OPT_CONNECT_TIMEOUT*/, 1); $mysqli->options(11 /*MYSQL_OPT_READ_TIMEOUT*/, 1); $mysqli->options(12 /*MYSQL_OPT_WRITE_TIMEOUT*/, 1); $mysqli->real_connect("localhost", "user", "password", "database"); ``` --- ### 二、使用`PDO`扩展 PDO(PHP Data Objects)支持多种数据库,提供统一的API接口: ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; try { // 创建PDO实例 $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password); // 设置错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功"; } catch(PDOException $e) { die("连接失败: " . $e->getMessage()); } ?> ``` --- ### 三、关键区别与建议 1. **`mysqli` vs `PDO`**: - `mysqli`仅支持MySQL,但支持过程化和面向对象两种风格。 - `PDO`支持12种数据库,适合需要跨数据库迁移的项目。 2. **安全性**: - 使用预处理语句防止SQL注入,如: ```php $stmt = $conn->prepare("SELECT * FROM users WHERE email = ?"); $stmt->bind_param("s", $email); ``` 3. **旧代码迁移**: - 将`mysql_*`函数替换为`mysqli_*`或`PDO`方法。 - 注意`mysql_real_escape_string()`可替换为`mysqli_real_escape_string()`[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值