首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php中mysqli的封装

基础概念

mysqli 是 PHP 中的一个扩展,用于与 MySQL 数据库进行交互。它提供了面向对象和过程式的 API,使得开发者能够方便地执行 SQL 查询、处理结果集以及管理数据库连接。

相关优势

  1. 性能mysqli 是对 MySQL 数据库原生协议的封装,因此性能较高。
  2. 安全性:支持预处理语句,可以有效防止 SQL 注入攻击。
  3. 易用性:提供了简洁的 API,便于开发者快速上手。
  4. 兼容性:与 PHP 的其他部分兼容性良好,易于集成到现有项目中。

类型

mysqli 主要有两种使用方式:

  1. 过程式风格:使用函数进行数据库操作。
  2. 面向对象风格:使用类和对象进行数据库操作。

应用场景

mysqli 适用于需要与 MySQL 数据库进行交互的各类 PHP 应用,包括但不限于:

  • Web 应用程序
  • RESTful API
  • 数据分析工具
  • 后台管理系统

封装示例

以下是一个简单的 mysqli 封装示例,采用面向对象风格:

代码语言:txt
复制
class MySQLiDB {
    private $host;
    private $username;
    private $password;
    private $dbname;
    private $conn;

    public function __construct($host, $username, $password, $dbname) {
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
        $this->dbname = $dbname;

        $this->connect();
    }

    private function connect() {
        $this->conn = new mysqli($this->host, $this->username, $this->password, $this->dbname);

        if ($this->conn->connect_error) {
            die("连接失败: " . $this->conn->connect_error);
        }
    }

    public function query($sql) {
        return $this->conn->query($sql);
    }

    public function escape($string) {
        return $this->conn->real_escape_string($string);
    }

    public function close() {
        $this->conn->close();
    }
}

// 使用示例
$db = new MySQLiDB('localhost', 'root', 'password', 'testdb');
$result = $db->query('SELECT * FROM users');
while ($row = $result->fetch_assoc()) {
    echo $row['username'] . '<br>';
}
$db->close();

常见问题及解决方法

  1. 连接失败
  2. SQL 注入
  3. 性能问题

参考链接

通过以上封装和示例代码,你可以更方便地在 PHP 项目中使用 mysqli 进行数据库操作,并遵循最佳实践来确保安全性和性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP中的MySQLi扩展学习(一)MySQLi介绍

可以说它的祖先,也就是 MySQL(原始) 扩展是我们很多人刚开始学习 PHP 时连接数据库的入门导师。不过随着时代的变迁,MySQL(原始) 扩展在 PHP7 中已经被彻底废弃了。...本身它们其实并没有什么太大的差别,不过现代化的大型框架中基本都会将 PDO 作为默认的数据库连接来进行封装,毕竟它的可移植性可以方便这些通用框架连接不同的数据库。...当然,小众并不意味着不好,就像日常开发中,我们很少会在 PHP 环境中使用别的数据库,那么在自己的小项目中完全使用一套 MySQLi 来操作数据库反而更加地方便快捷。...扩展的安装及 MySQL8 需要注意的地方 MySQLi 的扩展是随 PHP 源码一起发布的,我们在编译 PHP 的时候加上 --with-mysqli 就可以了。...而 PHP7.2.4 之前的版本中的 MySQLi 会使用 mysql_native_password 来对连接密码进行加密,这样就会导致无法连接上数据库。

2.9K00

PHP中的MySQLi扩展学习(一)MySQLi介绍

PHP中的MySQLi扩展学习(一)MySQLi介绍 关于 PDO 的学习我们告一段落,从这篇文章开始,我们继续学习另外一个 MySQL 扩展,也就是除了 PDO 之外的最核心的 MySQLi 扩展。...本身它们其实并没有什么太大的差别,不过现代化的大型框架中基本都会将 PDO 作为默认的数据库连接来进行封装,毕竟它的可移植性可以方便这些通用框架连接不同的数据库。...当然,小众并不意味着不好,就像日常开发中,我们很少会在 PHP 环境中使用别的数据库,那么在自己的小项目中完全使用一套 MySQLi 来操作数据库反而更加地方便快捷。...而 PHP7.2.4 之前的版本中的 MySQLi 会使用 mysql_native_password 来对连接密码进行加密,这样就会导致无法连接上数据库。...测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/4.PHP中的MySQLi扩展学习(一)MySQLi

2.9K20
  • PHP中的MySQLi扩展学习(三)mysqli的基本操作

    我们继续 MySQLi 扩展的学习,上篇文章中提到过,MySQLi 的扩展相对于 PDO 来说功能更加的丰富,所以我们依然还会在学习过程中穿插各种 MySQLi 中好玩的方法函数。...不过,今天的主角是 MySQLi 中如何执行 SQL 语句以及多条 SQL 语句的执行。 连接与选择数据库 首先是一个小内容的学习分享,依然还是连接数据库,不过这次我们用另外一种方式来进行连接。...在实例化过程中,我们并没有给 mysqli 的构造函数传递任何的参数,而是使用 real_connect() 方法来传递数据库服务器信息并建立连接。...$mysqli->select_db('mysql'); 就是这样一个简单的 select_db() 方法,就可以帮助我们在代码执行过程中动态地修改所连接的数据库。...如果执行的是 SELECT 语句,那么 query() 返回的就是一个 mysqli_result 对象,它代表从一个数据库查询中获取的结果集。关于这个对象的内容我们将在后面的文章中进行详细的说明。

    3K00

    PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句

    对于 MySQLi 来说,事务和预处理语句当然是它之所以能够淘汰 MySQL(原始) 扩展的资本。我们之前也已经学习过了 PDO 中关于事务和预处理语句相关的内容。...所以在这里,我们就不再多讲理论方面的东西了,直接上代码来看看 MySQLi 中这两大特性与 PDO 在使用上的区别。 事务处理 首先,我们还是要让 MySQLi 对于错误的语句也报出异常来。...而在 MySQLi 中,我们则需要指定 MySQLi_Driver 对象中的报错属性为抛出异常,很明显,MySQLi_Driver 就是 MySQLi 的驱动对象。...预处理语句 总体来说,事务的处理和 PDO 的区别不大,但是预处理语句和 PDO 中的使用的区别就有一些了。首先是我们的 MySQLi 中的占位符只有 ? 问号占位。...对于我们来说,还是多以学习了解为主,在自己封装或者使用某些以 MySQLi 为底层数据库操作的框架时不至于晕头转向。

    2.4K00

    PHP中的MySQLi扩展学习(六)MySQLI_result对象操作

    PHP中的MySQLi扩展学习(六)MySQLI_result对象操作 在之前的文章中,我们就已经接触过 MYSQLI_result 相关的内容。它的作用其实就是一个查询的结果集。...但在 MySQLi 中,会把查询到的结果也放入一个对象中,这就是 MySQLI_result 对象。...另外还有一个 fetch_assoc() 方法,直接就是返回 MYSQLI_ASSOC 格式的数据,这个方法不需要任何参数,它可以看成是 fetch_array(MYSQLI_ASSOC) 这种使用方式的一个封装...测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/9.PHP中的MySQLi扩展学习(六)MySQLI_result...对象操作.php 参考文档: https://www.php.net/manual/zh/class.mysqli-result.php

    2.9K10

    PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句

    PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句 对于 MySQLi 来说,事务和预处理语句当然是它之所以能够淘汰 MySQL(原始) 扩展的资本。...而在 MySQLi 中,我们则需要指定 MySQLi_Driver 对象中的报错属性为抛出异常,很明显,MySQLi_Driver 就是 MySQLi 的驱动对象。...对于我们来说,还是多以学习了解为主,在自己封装或者使用某些以 MySQLi 为底层数据库操作的框架时不至于晕头转向。...测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/7.PHP中的MySQLi扩展学习(四)mysqli...的事务与预处理语句.php 参考文档: https://www.php.net/manual/zh/book.mysqli.php

    2.2K10

    PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法

    PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法 虽说是少见的一些属性方法,但是可能还是有不少同学在日常的开发中使用过,这里只是学习了可能相对来说我们用得比较少的一些 mysqli...通过打印 mysqli 的 error_list 属性就可以看到当前的错误信息。 错误信息 紧接着上一段,对于执行语句的错误信息,我们可以通过几个 mysqli 中的属性来获得。...在这里,我们就先看看 mysqli 中关于 MySQL 线程的几个属性和方法吧。...测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/5.PHP中的MySQLi扩展学习(二)mysqli...类的一些少见的属性方法.php 参考文档: https://www.php.net/manual/zh/book.mysqli.php

    1.6K10

    PHP扩展 Mysql 与 Mysqli

    PHP开发中,使用Mysql扩展来链接Mysql数据库进行增删改查等操作。 在选择Mysql扩展的时候,官方提供了两种: MySQL 原始版。...特性比较 特性 mysqli mysql PHP版本 >=5.0 >3.0 MySQL开发状态 活跃 仅维护 MySQL建议使用 首选 建议 API的字符集支持 是 否 存储过程支持情况 是 否 多语句执行支持情况...相关概念 MySQL 与 MySQLi 都是PHP方面的函数集。 在 PHP5 版本以后,增加了mysqli的函数功能。 某种意义上讲,它是MySQL系统函数的增强版,更稳定更高效更安全。...在 PHP5.3.0 版本中被引入。 在 PHP5.4 之后的版本mysqlnd被作为默认配置选项。 由zend公司开发的MySQL数据库驱动。...建议 PHP版本为5.x建议使用 mysqli 扩展。 PHP版本为7 只能使用 mysqli 扩展。 Thanks ~

    2.9K30

    PHP Mysqli 常用代码集合

    PHP5.0开始,不仅可以使用早期的mysql数据库扩展函数,还能使用新扩展的mysqli技术实现与mysql数据库的信息交流,PHP的mysqli扩展被封装在在一个类中,它是一种面向对象技术,只能在PHP5...和MYSQL4,1或更高的版本才能使用,(i)表示该进,使用mysqli,执行速度更快,更方便,更高效,也可以使数据库访问更安全(因为用类模式) 使用mysqli 简单流程 设置PHP.ini 配置文件...建立MYSQL配置文件 config.ini.php config.ini.php 内容如下: 微信图片_20191129171010.jpg 用mysqli链接MYSQL数据库: 微信图片_20191129171025...,返回插入的行id(自动) 事务处理 在默认情况下,MYSQL是以自动提交(autocommit)模式运行,这就意味着所执行的每一个语句都将立即写入数据库中,但如果使用事务安全的表格类型,是不希望自动提交的行为的....jpg 以上就是PHP Mysqli 常用代码集合所有详细内容。

    1.8K20

    PHP mysqli_multi_query 连续执行的坑

    想想以前做 java 批量更新的时候类似这样的语句执行的很happy 啊,为什么轮到 php 的时候就这鸟样了, 最开始还以为是自己的 sql 语句写的有问题,但是拿到 mysql 的客户端一执行, 没问题...然后就猜到应该是 mysqli_multi_query 这个函数的问题了. google 了一把, 有个文章里提到了参考官方手册. 对啊, 有问题可以看看官方文档怎么说的....好了, 找到官方手册后, 发现问题中被置顶的注意事项就是这个: WATCH OUT: if you mix $mysqli->multi_query and $mysqli->query, the latter...php // BAD CODE: $mysqli->multi_query(" Many SQL queries ; "); // OK $mysqli->query(" SQL statement #1...php // WORKING CODE: $mysqli->multi_query(" Many SQL queries ; "); // OK while ($mysqli->next_result(

    1.9K60

    PHP+Mysqli 事务处理

    MYSQL php PHP+Mysqli 事务处理 php+mysqli 事物处理 事物就是如果两条或多条数据只要有一条SQL语句错误,那么已经执行成功的执行回滚操作,把已经生效的SQL语句回滚为原来的值...比如A原来有100元,B也有100元,A向B转账50元,那么就要执行两条SQL语句,一个是A的余额要减50,B的余额要加50, 如果第一条语句成功了,但是第二条语句失败了,那么就会丢失数据了,这个时候就需要事务处理了...,有一条错误语句,那么已经执行成功的语句都要回滚,返回失败!...代码 直接看代码吧 //SQL连接 $mysqli = new mysqli('127.0.0.1','root','root','test');//实例化Mysqli对象,参数分别是:数据库主机地址,...用户名,密码,数据库名 if (mysqli_connect_errno()) {//判断数据库连接是否错误 die(mysqli_connect_error()); } $mysqli->set_charset

    1K10

    PHP-Mysqli_query()连接数据库

    用法 mysqli_query(connection,query,resultmode); 参数 用法 connection 必需。规定要使用的 MySQL 连接。 query 必需。...非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。...结果集 fetch_array() : 返回结果集的一行作为数组,两种数组索引都行 fetch_object(): 返回结果集的一行作为对象 fetch_row() : 返回结果集的一行作为枚举数组,只能使用数字索引...fetch_assoc() : 返回结果集的一行作为关联数组,只能是关联数组的索引形式 Mysqli_connect连接 $server = "localhost"; $username = "da1sy...);");//插入一条记录 $max = mysqli_query($coon,"SELECT * from num where seq =".

    2.8K20
    领券