20 PHP如何捕获sql错误

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 路老师带你深入学习PHP,掌握技术干货。本文介绍了PDO中捕获SQL错误的三种模式:默认模式、警告模式和异常模式,以及如何使用errorCode()和errorInfo()方法进行错误处理。

有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享

路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。

image.gif 编辑


接着上篇我们来看下sql错误的捕获模式。

1 PDO中捕获SQL语句中的错误

在PDO中有3种方法可以捕获SQL语句中的错误,分别为默认模式、警告模式和异常模式,三者分别对应的对象变量值为:

  • 默认模式:PDO::ERRMODE_SILENT
  • 警告模式:PDO::ERRMODE_WARNING
  • 异常模式:PDO::ERRMODE_EXCEPTION

1.1 默认模式

在默认模式下设置PDOStatement对象的errorCode属性,但不进行其他任何操作。

案例:添加数据到大V表member里,故意把member写错:

index.php内容编写如下:(故意把member写成members

<?php
    require "config.php";
    try{
        //实例化PDO对象,采用new的方式
        $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
    } catch (PDOException $th) {
        echo $th->getMessahe()."<br>";
    }
    $sql = "insert into members(nickname,email)values('luTeacher','luTeacher@163.com')";
    $result = $pdo->prepare($sql);
    $result->execute();
    if(!$result->errorCode()){
        echo "添加数据成功!";
    }else{
        echo "添加异常,错误信息:<br>";
        echo "SQL Query:".$sql;
        echo "<pre>";
        print_r($result->errorInfo());
    }
    include_once('lists.html');
?>

image.gif

运行效果如下:

image.gif 编辑

1.2 警告模式

警告模式会产生一个PHP警告,并设置errorCode属性。如果设置的是警告模式,那么除非明确地检查出了错误代码,否则程序会继续按照其方式运行。

修改index.php内容如下:

<?php
    require "config.php";
    try{
        //实例化PDO对象,采用new的方式
        $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
    } catch (PDOException $th) {
        echo $th->getMessahe()."<br>";
    }
    //设置警告模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
    //故意写错member为members
    $sql = "select * from members";
    $result = $pdo->prepare($sql);
    $result->execute();
    include_once('lists.html');
?>

image.gif

错误信息如下:

image.gif 编辑

1.3 异常模式

异常模式会创建一个PDOException,并设置errorCode属性。它可以将执行的代码封装到一个try catch语句块中。未捕获的异常将会导致脚本中断,并显示堆栈跟踪,让用户了解了哪里出现了问题。

案例:设置异常模式。

<?php
    require "config.php";
    try{
        //实例化PDO对象,采用new的方式
        $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
        //设置异常模式
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        //故意写错member为members
        $sql = "select * from members";
        $result = $pdo->prepare($sql);
        $result->execute();
        include_once('lists.html');
    } catch (PDOException $th) {
        echo 'PDO异常捕获:<br>';
        echo 'sql语句异常:'.$sql;
        echo '<pre>';
        echo "Code:".$th->getCode()."<br>";
        echo "File:".$th->getFile()."<br>";
        echo "Line:".$th->getLine()."<br>";
        echo "Trace:".$th->getTraceAsString()."<br>";
        echo "Error:".$th->getMessahe()."<br>";
        echo '</pre>';
    }
    
    
    
?>

image.gif

image.gif 编辑

2 PDO中的错误处理

在PDO中有两个获取程序中错误信息的方法:errorCode()方法和errorInfo()方法。

2.1 errorCode()方法

errorCode()方法用于获取在操作数据库句柄时所发生的错误代码,这些错误代码被称为SQLSTATE代码。这个代码一般有5个数字和字母组成的。如下图,通过这个错误代码就能判断操作是否成功。

image.gif 编辑

2.2 errorInfo()方法

errorInfo()方法用于获取操作数据库句柄是所发生的错误信息。 errorInfo()方法返回值是一个数组,该数组包含了最后一次操作数据库的错误信息描述,假如数组为errorArray,

  • errorArray[0]:SQLSTATE错误码
  • errorArray[1]:错误代码
  • errorArray[2]:错误信息

image.gif 编辑

下一篇 PDO事务处理

相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
3月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
87 4
|
4月前
|
PHP 数据库 开发者
PHP中的异常处理:捕获与处理错误
【10月更文挑战第20天】在代码的海洋中,异常就像是突如其来的风暴,可能会打翻我们的船只。了解如何在PHP中搭建一个坚固的避风港——使用异常处理机制来捕获和处理这些不期而至的错误,是每位船长(开发者)必须掌握的技能。本文将带你驶入这片海域,教你如何用PHP的异常处理机制来确保你的应用程序即使在遇到问题时也能优雅地航行。
|
6月前
|
SQL 安全 API
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
130 4
|
8月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
9月前
|
SQL 安全 PHP
【PHP 开发专栏】PHP 防止 SQL 注入的方
【4月更文挑战第30天】本文介绍了PHP防止SQL注入的策略,包括理解SQL注入的原理和危害,如数据泄露和系统控制。推荐使用参数化查询(如PDO扩展)、过滤和验证用户输入,以及选择安全的框架和库(如Laravel)。此外,强调了保持警惕、定期更新维护和开发人员安全培训的重要性,以确保应用安全。
266 3
|
SQL 数据库 索引
SQL Server开启变更数据捕获(CDC)
SQL Server开启变更数据捕获(CDC)
|
SQL JSON API
PHP读取数据库记录转换为JSON的代码(API接口的SQL语句)
PHP读取数据库记录转换为JSON的代码(API接口的SQL语句)
156 0
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql