当前位置: 技术文章>> 如何在 PHP 中使用 MySQLi 进行数据库操作?

文章标题:如何在 PHP 中使用 MySQLi 进行数据库操作?
  • 文章分类: 后端
  • 6664 阅读

在PHP中,使用MySQLi(MySQL Improved)扩展进行数据库操作是一种常见且推荐的做法。MySQLi扩展提供了一个面向过程和面向对象两种风格的API,让开发者可以根据自己的喜好和项目需求选择使用。下面,我将详细阐述如何在PHP中通过MySQLi扩展进行数据库的连接、数据查询、插入、更新和删除等基本操作。同时,我会在适当的地方提及“码小课”,作为一个学习资源的提示,帮助读者进一步深入学习。

一、数据库连接

在使用MySQLi进行任何数据库操作之前,首先需要与数据库建立连接。这里以面向对象的方式为例:

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>

这段代码首先定义了数据库服务器的地址、用户名、密码和数据库名。然后,通过new mysqli()构造函数创建了一个mysqli对象,用于表示与数据库的连接。如果连接失败,会通过die()函数输出错误信息并终止脚本执行。成功连接后,会输出“连接成功”。

二、执行SQL查询

1. 查询数据

一旦建立了数据库连接,就可以执行SQL查询来获取数据了。

<?php
// 假设连接已经建立
$sql = "SELECT id, firstname, lastname FROM Users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 输出每行数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 结果";
}
$conn->close();
?>

这段代码首先执行了一个SQL查询,然后从结果集中逐行提取数据,并打印出来。fetch_assoc()方法用于获取一行作为关联数组,数组的键是列名。

2. 预处理语句

为了增强安全性,特别是防止SQL注入攻击,建议使用预处理语句(Prepared Statements)。

<?php
// 假设连接已经建立
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM Users WHERE id = ?");
$stmt->bind_param("i", $id);

$id = 1; // 假设我们要查询ID为1的用户
$stmt->execute();

$result = $stmt->get_result();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 结果";
}
$stmt->close();
$conn->close();
?>

在这段代码中,我们使用了prepare()方法来准备一个SQL语句,并通过bind_param()方法绑定参数。这样做可以确保传递给SQL语句的值被正确地转义,从而防止SQL注入。

三、插入数据

使用预处理语句插入数据也是类似的:

<?php
// 假设连接已经建立
$stmt = $conn->prepare("INSERT INTO Users (firstname, lastname) VALUES (?, ?)");
$stmt->bind_param("ss", $firstname, $lastname);

$firstname = "John";
$lastname = "Doe";

if ($stmt->execute()) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

这段代码演示了如何插入一条新记录到数据库中。通过bind_param()方法,我们绑定了要插入的值的类型和变量。

四、更新数据

更新数据同样可以使用预处理语句来完成:

<?php
// 假设连接已经建立
$stmt = $conn->prepare("UPDATE Users SET lastname = ? WHERE id = ?");
$stmt->bind_param("si", $lastname, $id);

$lastname = "Smith";
$id = 1;

if ($stmt->execute()) {
    echo "记录更新成功";
} else {
    echo "Error: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

五、删除数据

删除数据也可以使用预处理语句来执行:

<?php
// 假设连接已经建立
$stmt = $conn->prepare("DELETE FROM Users WHERE id = ?");
$stmt->bind_param("i", $id);

$id = 1;

if ($stmt->execute()) {
    echo "记录删除成功";
} else {
    echo "Error: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

六、异常处理

虽然上面的例子中使用了简单的错误检查,但在实际项目中,建议使用异常处理来捕获和处理可能发生的错误。MySQLi扩展支持异常模式,可以通过设置mysqli对象的report_mode属性来启用。

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$conn = new mysqli($servername, $username, $password, $dbname);

// 接下来的代码...
?>

启用异常模式后,如果数据库操作失败,将自动抛出异常,你可以通过try-catch语句来捕获和处理这些异常。

七、总结

通过上面的介绍,我们了解了如何在PHP中使用MySQLi扩展进行数据库的基本操作,包括连接数据库、执行SQL查询、插入、更新和删除数据等。重要的是要始终使用预处理语句来增强SQL查询的安全性,防止SQL注入攻击。同时,合理利用异常处理机制来捕获和处理可能发生的错误。如果你对MySQLi扩展的更多高级功能感兴趣,比如事务处理、多语句执行等,可以访问“码小课”网站获取更多学习资源,进一步深入学习。

推荐文章