PHP作为一种广泛使用的脚本语言,经常与MySQL数据库结合使用来构建动态网站和应用。MySQL扩展是PHP中用于与MySQL数据库交互的一组函数和类。了解并掌握MySQL扩展是PHP开发者必备技能之一。本文将深入探讨PHP MySQL扩展的必备知识和高效应用技巧。

一、MySQL扩展概述

MySQL扩展是PHP用来连接和操作MySQL数据库的一组函数。在PHP 7.0及之前的版本中,主要使用的是mysql和mysqli扩展。虽然从PHP 7.0开始,官方不再推荐使用mysql扩展,但在某些旧系统或特定场景下,了解mysql扩展的工作原理仍然具有重要意义。

二、MySQLi 扩展

MySQLi 扩展是一个面向对象和面向过程的数据库接口,提供了更多的功能和安全特性。以下是MySQLi扩展的一些关键点:

2.1 启用MySQLi 扩展

确保你的PHP环境中已启用MySQLi扩展。在php.ini文件中找到以下行并去掉前面的分号(如果存在分号):

extension=mysqli

保存并重新启动你的Web服务器以应用更改。

2.2 MySQLi 实例

创建MySQLi实例时,你可以使用以下代码:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";

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

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

2.3 常用的MySQLi方法

MySQLi提供了丰富的查询和数据处理方法,如:

  • query(): 执行查询并返回结果集。
  • fetch_assoc(): 从结果集中获取当前行作为关联数组。
  • close(): 关闭MySQLi连接。

2.4 MySQLi - 面向对象

使用面向对象的方式连接数据库:

$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// 执行查询
$result = $mysqli->query("SELECT * FROM table");

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} else {
    echo "0 results";
}

$mysqli->close();

2.5 MySQLi - 面向过程

使用面向过程的方式连接数据库:

$conn = mysqli_connect("localhost", "username", "password", "database");

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT * FROM table";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} else {
    echo "0 results";
}

mysqli_close($conn);

三、PDO 连接

PDO(PHP Data Objects)扩展提供了一个数据访问抽象层,允许你使用相同的接口访问不同的数据库。以下是PDO连接的基本步骤:

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

四、创建数据库和表

使用MySQLi扩展创建数据库和表的示例:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

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

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "CREATE DATABASE IF NOT EXISTS test_db";

if ($conn->query($sql) === TRUE) {
    echo "Database created successfully";
} else {
    echo "Error creating database: " . $conn->error;
}

$conn->close();

五、总结

MySQL扩展是PHP开发者必须掌握的核心技术之一。通过本文的介绍,你应该对MySQLi和PDO扩展有了更深入的了解。掌握这些扩展将帮助你更高效地与MySQL数据库交互,从而构建出更强大的PHP应用程序。