入门PHP就来我这(高级)19 ~ 捕获sql错误

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

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

 


 接着上篇我们来看下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


<?phprequire "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');
?>

 运行效果如下:

 1.2 警告模式

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

修改index.php内容如下:


<?phprequire "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');
?>

错误信息如下:

1.3 异常模式

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

案例:设置异常模式。


<?phprequire "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>';}?>

 2 PDO中的错误处理

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

2.1 errorCode()方法

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

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

 

下一篇 PDO事务处理


大家如果喜欢技术,并想有个好的交流平台可以关注我的 我的知乎首页,会不定期分享本人觉得比较好的技术类电子书。
另外,自己创建的一个技术qq群,玩转技术群,该群里功能:分享技能,电子书,源代码,以及兼职项目等交流,欢迎大家加入一起交流。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 中的可调⽤对象

C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针lambda表达式std::function()协程 可调用对象用处⼴泛&#xff1a; ⽐如在使⽤⼀些基于范围的模板函数时&#xff0c;如 sort(It first, It l…

对于配置LLM,集显和独显的具体区别和影响

在配置大型语言模型&#xff08;LLM&#xff09;时&#xff0c;集成显卡&#xff08;集显&#xff09;和独立显卡&#xff08;独显&#xff09;之间的区别和影响主要体现在以下几个方面&#xff1a; 1. 性能差异 集成显卡&#xff08;集显&#xff09;&#xff1a; 集显通常集…

大话光学原理:1.“实体泛光说”、反射与折射

一、实体泛光说 在古希腊&#xff0c;那些喜好沉思的智者们中&#xff0c;曾流传着一个奇妙的设想&#xff1a;他们认为&#xff0c;我们的眼睛仿佛伸出无数触手般的光线&#xff0c;这些光线能向四面八方延伸&#xff0c;紧紧抓住周围的每一个物体。于是&#xff0c;当我们凝视…

生成多个ssh访问不同git

如果&#xff0c;你的git代码仓库&#xff0c;比如说腾讯云coding&#xff0c;通过ssh秘钥访问&#xff0c;一直用的好好的&#xff0c;有一天&#xff0c;你又增加一个aliyun云效的代码仓库&#xff0c;又配置了aliyun云效的秘钥并且&#xff0c;根据aliyun云效的官方文档上传…

Angular进阶之九: JS code coverage是如何运作的

环境准备 需要用到的包 node 18.16.0# Javascript 代码编辑"babel/core": "^7.24.7","babel/preset-env": "^7.24.7","babel-loader": "^9.1.3",# 打包时使用的 module&#xff0c; 给代码中注入新的方法# http…

群晖NAS配置WebDav服务结合内网穿透实现跨平台云同步思源笔记

文章目录 前言1. 开启群晖WebDav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar4. 配置远程同步地址5. 笔记远程同步测试6. 固定公网地址7. 配置固定远程同步地址 前言 本教程主要分享如何将思源笔记、cpolar内网穿透和群晖WebDav三者相结合&#xff0c;实现思源笔记的云同步…

打开excel时弹出stdole32.tlb

问题描述 打开excel时弹出stdole32.tlb 如下图&#xff1a; 解决方法 打开 Microsoft Excel 并收到关于 stdole32.tlb 的错误提示时&#xff0c;通常意味着与 Excel 相关的某个组件或类型库可能已损坏或不兼容。 stdole32.tlb 是一个用于存储自动化对象定义的类型库&#x…

【vueUse库Watch模块各函数简介及使用方法--上篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseWatch函数1. until2. watc…

vue 切换主题色切换主题色切换主题色切换主题色切换主题色

第一种&#xff1a;使用CSS变量 CSS变量&#xff08;Custom Properties&#xff09;是CSS的一种新特性 1.实现需求&#xff1a;自定义颜色 定义变量 全局的theme.css :root {--primary-color:red; }在组件中使用这些变量 demo.vue <template><div class"main…

海外多语言盲盒APP系统开发

随着盲盒的全球化发展&#xff0c;盲盒已经成为了一个热门行业&#xff0c;不仅深受我国消费者的青睐&#xff0c;更是深受海外消费者的喜爱。目前&#xff0c;盲盒出海已经成为了企业拓展市场的新机会。 在数字化时代&#xff0c;海外盲盒APP为企业提供了一个快速打开海外盲盒…

Linux设置开机自启动脚本

这篇文章写systemd 的自启动方法 systemd 默认读取 /etc/systemd/system下的配置文件&#xff0c;该目录下的文件会链接 &#xff08;软链接&#xff09;/lib/systemd/system/ 下的文件 sudo vim /lib/systemd/system/nattunnel.service 写入以下内容 [Unit] Descriptionlzf…

应急响应——勒索病毒

先上搜索引擎上搜 也可以用360来杀 但是都无法解密 可以解密的&#xff1a; linux

【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示BME280传感器数据

LCD ST7735显示BME280传感器数据 文章目录 LCD ST7735显示BME280传感器数据1、硬件准备与接线2、代码实现本文中将介绍如何使用 ESP8266 NodeMCU 板(ESP12-E 模块)和 BME280 气压、温度和湿度传感器构建气象站。 NodeMCU 微控制器 (ESP8266EX) 从 BME280 传感器读取温度、湿度…

优秀策划人必逛的地方,你不会还不知道吧?

道叔今天依然记得当初刚入行的时候&#xff0c;每天为完成策划任务&#xff0c;焦虑的整晚睡不着觉的痛苦。 但其实……很多时候&#xff0c;选择比努力更重要 优秀的策划和文案&#xff0c;也从来不是天生&#xff0c;你要走的路&#xff0c;前人都已经走过,你要做的仅仅是整…

Apache部署与虚拟主机

Apache部署与虚拟主机 资源列表基础环境一、安装依赖二、源码编译及安装1、解包2、配置编译安装3、优化执行路径4、添加为系统服务 三、虚拟主机1、基于域名的虚拟主机2、添加虚拟主机配置3、基于 IP 地址、基于端口的虚拟主机 资源列表 操作系统配置主机IPCentOS7.3.16112C4G…

python破解密码·筛查和选择

破解密码时可能遇到的几种情况 ① 已知密码字符&#xff0c;破排序 ② 已知密码位数&#xff0c;破字符 ③ 已知密码类型&#xff0c;破字位 ④ 已知部分密码&#xff0c;破未知 ⑤ 啥都不知道&#xff0c;盲破&#xff0c;玩完 ⑥ 已知位数、字符、类型、部分密码中的几个&am…

技术速递|VS Code Java 6月更新 - 项目设置功能增强!大量 Spring 新特性

作者&#xff1a;Nick Zhu 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎阅读 Visual Studio Code for Java 的六月更新&#xff01;在这篇博客中&#xff0c;我们将分享项目设置项目的重要更新以及一系列 Spring 的功能改进&#xff0c;让我们开始吧&#xff01; 项目设…

如何魔改vnstat-docker项目使其支持每1分钟采样?

文章目录 一、概述二、官网参考1. 官网地址2. 查看打包过程3.打包命令 三、修改过的文件四、部署运行1. 编排文件2. 运行效果 一、概述 接前文 网络流量监控神器vnStat初探 我们已经了解了vnStat的作用、使用和docker部署。 同时也了解到官方版本支持的采样统计间隔最小为5分…

使用tkinter拖入excel文件并显示

使用tkinter拖入excel文件并显示 效果代码 效果 代码 import tkinter as tk from tkinter import ttk from tkinterdnd2 import TkinterDnD, DND_FILES import pandas as pdclass ExcelViewerApp(TkinterDnD.Tk):def __init__(self):super().__init__()self.title("Excel…

java自定义注解和使用

Java 注解(Annotations)是元数据形式的标记,可以添加到 Java 代码中,用于提供额外的信息。在编译时、运行时或通过工具使用这些注解,来影响程序的行为或生成文档。注解可以用于类、方法、字段、参数、局部变量、包等。 定义注解 要定义一个注解,可以使用 @interface 关…