博客
关于我
PDO中捕获SQL语句中的错误
阅读量:794 次
发布时间:2023-02-27

本文共 3184 字,大约阅读时间需要 10 分钟。

PDO数据库连接错误处理模式解析

1. 默认模式(PDO::ERRMODE_SILENT)

在默认模式下,PDOStatement对象的errorCode属性会被设置,但不会产生任何警告或异常。

这种模式适用于需要手动检查数据库操作结果的场景。

        $dbms = 'mysql';        $dbName = 'admin';        $user = 'root';        $pwd = 'password';        $host = 'localhost';        $dsn = "[$dbms:host=$host;port=3306;dbname=$dbName]";        $pdo = new PDO($dsn, $user, $pwd);        $query = "INSERT INTO user (username, password) VALUES('admin')";        $res = $pdo->prepare($query);        $res->execute();        $code = $res->errorCode();        if ($code == 00000) {          echo "数据插入成功";        } else {          echo "数据库错误:";          echo "SQL Query: " . $query;          echo "
错误信息:" . var_dump($res->errorInfo()) . "
"; }

执行结果示例:

21S01 数据库错误:表'admin.user'中缺少列

2. 警告模式(PDO::ERRMODE_WARNING)

在警告模式下,PDO会生成一个PHP警告,并设置errorCode属性,但不会抛出异常。

这种模式适用于需要获取详细错误信息但仍希望程序继续执行的场景。

        $dbms = 'mysql';        $dbName = 'admin';        $user = 'root';        $pwd = 'password';        $host = 'localhost';        $dsn = "[$dbms:host=$host;port=3306;dbname=$dbName]";        try {          $pdo = new PDO($dsn, $user, $pwd);          $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);          $query = "SELECT * FROM userrr";          $res = $pdo->prepare($query);          $res->execute();          while ($result = $res->fetch(PDO::FETCH_ASSOC)) {            echo $result['id'] . " " . $result['username'] . " " . $result['password'];          }        } catch (PDOException $e) {          die("ERROR!:" . $e->getMessage());        }        echo "继续运行脚本";      

执行结果示例:

Warning: PDOStatement::execute() []: SQLSTATE[42S02]: 未找到基础表或视图:1146 表'admin.userrr'不存在

继续运行脚本将执行完毕

3. 异常模式(PDO::ERRMODE_EXCEPTION)

在异常模式下,PDO会抛出一个PDOException异常,并设置errorCode属性。

这种模式适用于需要严格控制数据库操作异常的场景,通常用于需要完整错误信息以便调试的环境。

        $dbms = 'mysql';        $dbName = 'admin';        $user = 'root';        $pwd = 'password';        $host = 'localhost';        $dsn = "[$dbms:host=$host;port=3306;dbname=$dbName]";        try {          $pdo = new PDO($dsn, $user, $pwd);          $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);          $query = "DELETE FROM userrr WHERE id=1";          $res = $pdo->prepare($query);          $res->execute();        } catch (PDOException $e) {          echo "PDO异常捕获:";          echo "错误描述:" . $e->getMessage();          echo "SQL语句:" . $query;          echo "
错误代码:" . $e->getCode() . "
"; echo "
错误文件:" . $e->getFile() . "
"; echo "
错误行号:" . $e->getLine() . "
"; echo "
错误跟踪:" . $e->getTraceAsString() . "
"; }

执行结果示例:

PDO异常捕获:错误描述:SQLSTATE[42S02]: 未找到基础表或视图:1146 表'admin.userrr'不存在

错误文件:D:\wampserver\www\test\test\index1.php

错误行号:14

错误跟踪信息见上述输出

转载地址:http://zlvfk.baihongyu.com/

你可能感兴趣的文章
ORACEL学习--理解over()函数
查看>>
Oracle 11g数据库安装和卸载教程
查看>>
ORACLE Bug 4431215 引发的血案—原因分析篇
查看>>
oracle dblink 创建使用 垮库转移数据
查看>>
oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
查看>>
Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
查看>>
oracle dg switchover,DG Switchover fails
查看>>
Oracle EBS环境下查找数据源(OAF篇)
查看>>
Oracle GoldenGate Director安装和配置(无图)
查看>>
oracle script
查看>>
Oracle select表要带双引号的原因
查看>>
Oracle SOA Suit Adapter
查看>>
Oracle Spatial空间数据库建立
查看>>
UML— 活动图
查看>>
Oracle Statspack分析报告详解(一)
查看>>
oracle where 条件的执行顺序分析1
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
oracle 修改字段类型方法
查看>>
Oracle 写存储过程的一个模板还有一些基本的知识点
查看>>
Oracle 创建 DBLink 的方法
查看>>