从多个方面详细阐述MySQLi

发布时间:2023-05-22

一、MySQLi是什么

MySQLi是PHP访问MySQL数据库的扩展,与MySQL扩展相比,MySQLi支持更多的功能和更好的性能。

MySQLi是“MySQL improved”(MySQL改进版)的简称,它支持面向对象和过程化两种编程方式,并提供了MySQL服务器的完整功能。

MySQLi在PHP 5版本中引入,是PHP 5的一部分,所以如果你想使用MySQLi扩展,必须安装PHP 5或者更高版本。

二、MySQLi的优势

MySQLi扩展比MySQL扩展更加先进,MySQLi库主要提供如下优势:

  • 支持面向对象、过程化两种程序设计方式。
  • 支持预处理和绑定参数,可有效防止SQL注入攻击。
  • 支持事务处理、存储过程和多语句的查询。
  • 支持多种数据格式的交换,包括json和XML。
  • 对于MySQL的新特性,如MySQL 5的存储过程、触发器和事件,提供了良好的支持。
  • 与PHP7兼容性较好。

三、MySQLi的使用

1.连接MySQLi数据库

连接MySQLi数据库需要使用mysqli_connect()函数,该函数连接成功后返回一个连接对象。

//连接MySQLi数据库
$mysqli_conn = mysqli_connect("localhost", "root", "password", "database_name");
if (!$mysqli_conn) {
  die("连接失败: " . mysqli_connect_error());
}

2.执行SQL语句

执行SQL语句需要使用mysqli_query()函数,该函数执行成功则返回一个结果对象或者true,执行失败则返回false。

//执行SQL语句
$result = mysqli_query($mysqli_conn, "SELECT * FROM employee");
if (!$result) {
  die("查询失败: " . mysqli_error($mysqli_conn));
}

3.处理结果集

处理结果集需要使用mysqli_fetch_array()函数,该函数返回一行数据作为数组或者对象。

//处理结果集
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
  echo "员工编号: " . $row["emp_no"] . " - 员工姓名: " . $row["first_name"] . " " . $row["last_name"] . "
"; }

4.预处理和绑定参数

预处理和绑定参数是指事先编译一个SQL语句模板,然后将参数绑定到该模板的语句中,并将该语句发送给MySQL服务器执行,这样可以避免SQL注入攻击。

//预处理和绑定参数
$stmt = mysqli_prepare($mysqli_conn, "INSERT INTO employee (emp_no, first_name, last_name, gender) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, "isss", $emp_no, $first_name, $last_name, $gender);
$emp_no = 10001;
$first_name = "John";
$last_name = "Doe";
$gender = "M";
mysqli_stmt_execute($stmt);

5.事务处理

事务处理指的是将一系列的SQL语句作为一个整体来执行,如果其中任何一条语句执行失败,则撤销所有已经执行的语句。

//事务处理
mysqli_autocommit($mysqli_conn, false);
mysqli_query($mysqli_conn, "UPDATE employee SET salary = salary * 1.1 WHERE emp_no = 10001");
mysqli_query($mysqli_conn, "UPDATE titles SET to_date = '9999-01-01' WHERE emp_no = 10001 AND title = 'Engineer'");
mysqli_commit($mysqli_conn);

四、总结

MySQLi是一个强大、高效、安全的扩展,可以帮助开发者更好地管理MySQL数据库,提升网站的性能和安全性。