·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

不再使用mysql驱动,只使用mysqli

952 2
发表于 2020-7-8 10:30:21 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、mysql与mysqli的概念相关:

    mysql与mysqli都是php方面的函数集,与mysql数据库关联不大。在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如mysql_query()的函数,属于面向过程在php5版本以后,增加了mysqli的函数功能,某种意义上讲,它是mysql系统函数的增强版,更稳定更高效更安全,与mysql_query()对应的有mysqli_query(),属于面向对象,用对象的方式操作驱动mysql数据库


二、mysql与mysqli的区别:

    mysql是非持继连接函数,mysql每次链接都会打开一个连接的进程。mysqli是永远连接函数,mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销。mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

拾光Lv.8 发表于 2020-7-8 10:30:35 | 查看全部
不错,支持!
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-19 09:59:19 | 查看全部
在Discuz!开发中,数据库操作是非常重要的一部分。随着PHP版本的更新,`mysql`扩展已经被弃用,推荐使用`mysqli`扩展来进行数据库操作。以下是如何在Discuz!中只使用`mysqli`驱动的一些关键点和步骤:

### 1. 了解`mysql`与`mysqli`的区别
- **mysql**:这是PHP早期版本的数据库扩展,使用面向过程的方式进行数据库操作。它不支持预处理语句、事务等高级功能,并且在PHP 5.5.0中被弃用,PHP 7.0.0中完全移除。
- **mysqli**:这是`mysql`的增强版,支持面向对象和面向过程两种编程方式。它支持预处理语句、事务、存储过程等高级功能,并且性能更好、更安全。

### 2. 在Discuz!中切换到`mysqli`
Discuz!默认支持`mysql`和`mysqli`两种数据库驱动。要切换到`mysqli`,你需要修改配置文件。

#### 修改配置文件
1. 打开Discuz!的配置文件`config/config_global.php`。
2. 找到以下代码:
  
  1. $_config['db']['1']['dbtype'] = 'mysql';
复制代码

3. 将其修改为:
  
  1. $_config['db']['1']['dbtype'] = 'mysqli';
复制代码


#### 修改数据库连接代码
如果你在插件或自定义代码中使用了`mysql`函数,需要将其替换为`mysqli`函数。以下是一些常见的替换示例:

- **mysql_connect()** 替换为 **mysqli_connect()**
  1. // mysql
  2.   $link = mysql_connect('localhost', 'user', 'password');
  3.   
  4.   // mysqli
  5.   $link = mysqli_connect('localhost', 'user', 'password');
复制代码


- **mysql_query()** 替换为 **mysqli_query()**
  1. // mysql
  2.   $result = mysql_query('SELECT * FROM table', $link);
  3.   
  4.   // mysqli
  5.   $result = mysqli_query($link, 'SELECT * FROM table');
复制代码


- **mysql_fetch_array()** 替换为 **mysqli_fetch_array()**
  1. // mysql
  2.   $row = mysql_fetch_array($result);
  3.   
  4.   // mysqli
  5.   $row = mysqli_fetch_array($result);
复制代码


- **mysql_error()** 替换为 **mysqli_error()**
  1. // mysql
  2.   echo mysql_error();
  3.   
  4.   // mysqli
  5.   echo mysqli_error($link);
复制代码


### 3. 使用预处理语句
`mysqli`支持预处理语句,这可以防止SQL注入攻击,并且提高查询效率。以下是一个使用预处理语句的示例:

  1. $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
  2. $stmt->bind_param("s", $username);
  3. $username = 'testuser';
  4. $stmt->execute();
  5. $result = $stmt->get_result();
  6. while ($row = $result->fetch_assoc()) {
  7.     // 处理每一行数据
  8. }
  9. $stmt->close();
复制代码


### 4. 事务处理
`mysqli`支持事务处理,这对于需要保证数据一致性的操作非常有用。以下是一个简单的事务处理示例:

  1. $mysqli->begin_transaction();
  2. try {
  3.     $mysqli->query("UPDATE account SET balance = balance - 100 WHERE user_id = 1");
  4.     $mysqli->query("UPDATE account SET balance = balance + 100 WHERE user_id = 2");
  5.     $mysqli->commit();
  6. } catch (Exception $e) {
  7.     $mysqli->rollback();
  8.     echo "Transaction failed: " . $e->getMessage();
  9. }
复制代码


### 5. 关闭连接
使用`mysqli`时,记得在操作完成后关闭连接:

  1. mysqli_close($link);
复制代码


### 6. 注意事项
- **兼容性**:确保你的PHP版本支持`mysqli`扩展(PHP 5.0及以上版本)。
- **性能优化**:`mysqli`的持久连接可以减少服务器开销,但也要注意连接池的管理,避免连接过多导致服务器资源耗尽。
- **安全性**:使用预处理语句可以有效防止SQL注入攻击。

通过以上步骤,你可以在Discuz!中完全切换到`mysqli`驱动,享受更高效、更安全的数据库操作体验。如果你在迁移过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net/)寻求帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.226.88.23,GMT+8, 2025-4-28 21:37 , Processed in 0.798749 second(s), 87 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表