小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-03-21 / 16 阅读
0
0

php 使用mysqli扩展连接数据库

在PHP中,使用MySQLi扩展连接MySQL数据库时,可以采用面向过程或面向对象的方式来实现。以下是两种不同方式的具体使用案例:

面向过程方式:

<?php
// 定义数据库连接参数
$servername = 'localhost';
$username = 'your_username';
$password = 'your_password';
$dbname = 'your_database';

// 使用mysqli_connect函数建立连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接是否成功
if (mysqli_connect_errno()) {
    echo "连接失败: " . mysqli_connect_error();
    exit();
} else {
    echo "连接成功!";
  
    // 进行数据库查询操作,例如:
    $sql = "SELECT * FROM your_table";
    $result = mysqli_query($conn, $sql);
  
    // 处理查询结果...
    while ($row = mysqli_fetch_assoc($result)) {
        print_r($row);
    }
  
    // 关闭数据库连接
    mysqli_close($conn);
}
?>

面向对象方式:

<?php
// 创建mysqli对象并连接数据库
$mysqli = new mysqli('localhost', 'your_username', 'your_password', 'your_database');

// 检查连接是否成功
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
} else {
    echo "连接成功!";

    // 进行数据库查询操作
    $sql = "SELECT * FROM your_table";
    $result = $mysqli->query($sql);

    // 处理查询结果
    while ($row = $result->fetch_assoc()) {
        print_r($row);
    }

    // 关闭结果集(如果需要的话,对于非缓冲查询是必需的)
    $result->free();

    // 关闭数据库连接
    $mysqli->close();
}
?>

以上两个示例都展示了如何通过mysqli扩展连接MySQL数据库以及执行一个简单的查询操作。面向对象方式更强调封装和继承等面向对象特性,通过创建 mysqli类的实例来进行数据库操作;而面向过程方式则是调用全局函数来完成相同的功能。在现代PHP开发中,推荐使用面向对象的方式,因为它能更好地适应复杂的应用场景且具有更好的可维护性。

在PHP中使用MySQLi扩展进行数据库查询,并结合 try...catch异常处理机制,可以确保对可能出现的错误进行妥善处理。以下是一个结合MySQLi查询与 try...catch的例子:

面向对象方式:

<?php
$servername = 'localhost';
$username = 'your_username';
$password = 'your_password';
$dbname = 'your_database';

try {
    // 创建一个新的MySQLi对象
    $mysqli = new mysqli($servername, $username, $password, $dbname);

    // 设置报告模式为异常(默认情况下mysqli可能返回错误码而非抛出异常,这里确保触发异常)
    $mysqli->set_charset("utf8"); // 设置字符集
    $mysqli->begin_transaction(); // 开启事务(可选,用于原子操作)

    // SQL查询
    $sql = "SELECT * FROM your_table WHERE some_column = ?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("s", $someValue); // 参数绑定
    $someValue = "example_value";
    $stmt->execute();

    // 获取查询结果
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        print_r($row);
    }

    // 提交事务(如果开启了事务)
    $mysqli->commit();

} catch (mysqli_sql_exception $e) {
    // 如果在执行过程中出现错误(如查询失败、事务回滚失败等)
    echo "Error: " . $e->getMessage();

    // 回滚事务(在异常发生时恢复数据一致性)
    if ($mysqli->in_transaction) {
        $mysqli->rollback();
    }

} finally {
    // 关闭数据库连接
    if ($mysqli instanceof mysqli && !empty($mysqli)) {
        $mysqli->close();
    }
}

?>

在这个例子中,try块内包含了可能会抛出异常的数据库操作,如连接数据库、执行SQL查询等。如果在执行这些操作时遇到错误(如SQL语法错误、连接失败等),将会抛出 mysqli_sql_exception异常,这时 catch块将捕获这个异常并进行相应的错误处理,比如记录错误日志、显示友好错误信息等,并可能执行回滚事务的操作以保持数据的一致性。

最后,无论是否发生异常,finally块都会被执行,用于关闭已经打开的数据库连接,确保资源得到释放。请注意,PHP 5.5版本以前不支持 finally关键字,那时你需要在 catch块末尾手动关闭连接。


评论