PHP-Mysqli

MySQLi 是 PHP 中用于与 MySQL 数据库交互的一个扩展库,它提供了面向过程和面向对象两种编程方式。以下是关于 MySQLi 的一些基本信息和使用方法:

MySQLi 的特点

MySQLi 是 PHP 中用于访问 MySQL 数据库的改进版本,支持 MySQL 4.1.3 或更高版本。

它提供了更丰富的功能和更好的性能,与旧版的 mysql 扩展相比,MySQLi 提供了更多的安全特性,如预处理语句和绑定参数,有助于防止 SQL 注入攻击。

安装和配置

要使用 MySQLi,需要在编译 PHP 时加入 MySQLi 扩展的支持。

配置时可以使用 --with-mysqli 选项来指定 MySQL 配置文件的路径。

连接数据库

使用 mysqli_connect() 函数或 new mysqli() 对象来建立与数据库的连接。

连接参数包括主机名、用户名、密码和数据库名。

执行 SQL 语句

使用 mysqli_query() 方法执行 SQL 语句。

对于查询语句,mysqli_query() 返回一个 mysqli_result 对象,可以通过 fetch_array()fetch_assoc() 等方法获取结果集。

预处理语句

MySQLi 支持预处理语句,通过 prepare()bind_param() 和 execute() 方法可以安全地执行带有参数的 SQL 语句。

多语句执行

使用 multi_query() 方法可以同时执行多条 SQL 语句。

通过 use_result() 或 store_result() 方法获取每个语句的执行结果。

错误处理

PHP7版本使用 mysqli_connect_error 和 mysqli_connect_errno 属性获取连接错误信息。前者返回完整错误信息(可通过配置修改返回异常),后者返回错误代码(如用户名或密码错误代码为:1045).

PHP8使用getMessage()来返回具体异常而非一长串的异常.

使用 error 和 errno 属性获取最近执行的 SQL 语句的错误信息。

MySQLi 是一个功能强大且灵活的扩展库,适用于需要高性能和安全的数据库交互的应用程序。

面向过程连接数据库

1.首先定义了三个变量,分别是服务名,用户名和密码,他们对应了创建数据库连接时需要用到的三个数据

2.如何创建连接: 使用函数mysqli_connnect()函数,该函数用来连接mysql数据库,里面有6个参数,分别是($hostname)服务器ip,数据库登陆的用户名($username)和密码($password),以及($database)数据库名,($port)端口号和($socket)很少用到.

<?php
    //面向过程
    $servername = "localhost";
    $username = "123";
    $password = "1234";

    //创建连接
    $conn = mysqli_connect($servername,$username,$password);

    //检测连接
    if(!$conn){
        die("连接失败: ". mysqli_connect_error());//判断(!$conn)条件是否成立,如果条件成立,则说明未连接上,使用die返回一个错误信息.mysqli_connect_error()函数可以返回失败原因.
    }
    echo "连接成功";

    //关闭
    mysqli_close($conn); //使用mysqli_close()来关闭数据库,一般数据库连接完成后会自动关闭.手动关闭可以节约服务器开支.
    ?>

捕获异常并返回给前端

在PHP8,未处理捕获异常时,会返回如下一长串结果给前端,这样的做法不安全且不美观,因此,需要想办法让系统只返回具体的错误原因给前端.

这就用到了try和catch关键字来进行异常处理.

在PHP中,try关键字用于异常处理,它允许开发者标记一段可能会产生异常的代码区域。如果在try代码块中发生异常,程序会立即跳转到catch代码块,并执行其中的逻辑用于处理异常或提供错误提示。

基本语法

php

try {
    // 可能会抛出异常的代码
} catch (Exception  $ e) {
    // 异常处理代码
}

catch块中,可以指定要捕获的异常类型,也可以使用通用的Exception作为捕获所有异常的类型。通过使用try...catch块,可以精确地捕获特定类型的异常,并针对性地处理这些异常。

getMessage()是一个方法,通常与异常处理相关。当在PHP程序中抛出异常时,可以使用 Exception $e->getMessage()方法来获取异常的具体消息内容。这个消息通常包含关于错误的具体描述,有助于开发者理解和解决问题。

多层try-catch嵌套

如果项目存在多个分层的代码块,每个代码块都可能会发生异常,可以使用多个try-catch块来处理异常。

php
try {
    // 第一层try代码块
    try {
        // 第二层try代码块
    } catch (ExceptionOne  $ e) {
        // 第二层catch代码块
    }
} catch (Exception  $ e) {
    // 第一层catch代码块
}

finally代码块

在捕获异常后,还可以使用finally代码块来执行一段一定会执行的代码。不管异常是否发生,finally代码块都会被执行。

php
try {
    // 代码块
} catch (Exception  $ e) {
    // 异常处理代码
} finally {
    // 一定会执行的代码
}

完整代码:

$servername = "localhost";
    $username = "root123";
    $password = "1234";

    //创建连接
    try{
        $conn = mysqli_connect($servername,$username,$password);//可能需要处理异常的片段,这里需要处理的是连接数据库可能存在的异常,比如连接不成功的话,就会跳转到catch()代码块
    } catch(Exception $e){
        //
        die("连接失败". $e->getMessage());//这里getMessage()是php内置函数
    }
    

    //检测连接
    //if(!$conn){
    //    die("连接失败: ". mysqli_connect_error());//判断!$conn条件是否成立,如果条件成立,则说明未连接上,使用die返回一个错误信息.mysqli_connect_error()函数可以返回失败原因.
    //}
    echo "连接成功";

    //关闭
    mysqli_close($conn); //使用mysqli_close()来关闭数据库,一般数据库连接完成后会自动关闭.手动关闭可以节约服务器开支.
    ?>

面向对象

面向对象方式创建数据库连接和面向过程的方式类似,

  • 面向对象:$conn = new mysqli($servername,$username,$password);
  • 面向过程:$conn = mysqli_connect($servername,$username,$password);
<?php
//面向对象
    $servername = "localhost";
    $username = "root";
    $password = "1234";

    //创建连接
    $conn = new mysqli($servername,$username,$password);//定义了一个变量$conn,然后new一个对象mysqli().

    //检测连接
    if($conn->connect_error) {
        die("连接失败".$conn->connect_error);
    }

    echo "连接成功";

    //关闭连接
    $conn->close();//调用$conn里面的close()方法.

异常处理

在面向对象的数据库连接使用connect_error方法也是返回一长串异常的结果的.因此也需要进行异常处理.

也是使用try和catch来进行捕获和处理.

使用$e->getMessage()方法来获取错误信息.

使用$e->getCode()或mysqli_connect_errno()方法来获取错误代码.

<?php
//面向对象
    $servername = "localhost";
    $username = "root8";
    $password = "1234";

    //创建连接
    try {
           $conn = new mysqli($servername,$username,$password);//定义了一个变量$conn,然后new一个对象mysqli().
    }catch(Exception $e){
        die("连接失败".$e->getMessage().$e->getCode());
        // die("连接失败".var_dump($e));
    }
 

    //检测连接
    if($conn->connect_error) {
        die("连接失败".$conn->connect_error);
    }

    echo "连接成功";

    //关闭连接
    $conn->close();//调用$conn里面的close()方法.
No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next