PDO::ERRMODE_EXCEPTION,除设置错误码之外,PDO 还将抛出一个 PDOException 异常类并设置它的属性来反射错误码和错误信息。...= new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test1', 'root', ''); // Fatal error: Uncaught PDOException...: SQLSTATE[HY000] [1049] Unknown database 'blog_test1' blog_test1 表并不存在,所以在 new PDO 的时候就已经直接会抛出异常了。...这个在实例化连接数据库过程中的错误处理机制是固定的,不是我们能修改的错误处理机制,毕竟如果连数据库连接都无法建立的话,就不用谈后面的任何操作了。...总算是能让程序中止运行并且报出 Fatal error 错误了,同时,这个异常信息也是可以通过 try...catch 来捕获到的。这样的开发才是我们最需要的开发形式。
1010:不能删除数据目录导致删除数据库失败 1011:删除数据库文件失败 1012:不能读取系统表中的记录 1020:记录已被其他用户修改 1021:硬盘剩余空间不足,请加大硬盘可用空间...:无效的主机名 1043:无效连接 1044:当前用户没有访问数据库的权限 1045:不能连接数据库,用户名或密码错误 1048:字段不能为空 1049:数据库不存在 1050:数据表已存在...1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败 1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器...错误:1279 SQLSTATE: HY000 (ER_UNTIL_COND_IGNORED) 消息:SQL线程未启动,因而UNTIL选项被忽略。...) 消息:未使用二进制日志功能。
%d) · 错误:1007 SQLSTATE: HY000 (ER_DB_CREATE_EXISTS) 消息:无法创建数据库'%s',数据库已存在。...· 错误:1008 SQLSTATE: HY000 (ER_DB_DROP_EXISTS) 消息:无法撤销数据库'%s',数据库不存在。...· 错误:1032 SQLSTATE: HY000 (ER_KEY_NOT_FOUND) 消息:无法在'%s'中找到记录。...: 3D000 (ER_NO_DB_ERROR) 消息:未选择数据库。...· 错误:1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) 消息:未知数据库'%s'。
而下面本渣渣要记录的一个网页错误就是ThinkPHP框架的,严格意义上来说应该是数据库的错误处理,以下仅供参考,仅为记录学习!...错误代码 [10501] PDOException in Connection.php line 390 SQLSTATE[HY000]: General error: 1030 Got error 28...master); // 返回结果集 return $this->getResult($pdo, $procedure); } catch (\PDOException...未开启错误提示: 开启错误提示: ThinkPHP框架调试开启 请注意ThinkPHP框架版本以及开发人员设置,本渣渣这里的开启仅供参考!...当然还有干扰信息,虽然本渣渣按照能正常访问,但是,这个替换处理方法实际上我这边是更换了一个本地的数据库,数据倒回到了去年20年的数据!
1010:不能删除数据目录导致删除数据库失败。 1012:不能读取系统表中的记录。 1020:记录已被其他用户修改。 1021:硬盘剩余空间不足,请加大硬盘可用空间。...1022:关键字重复,更改记录失败。 1040:已到达数据库的最大连接数,请加大数据库可用连接数。 1044:当前用户没有访问数据库的权限。 1045:不能连接数据库,用户名或密码错误。...1049:数据库不存在。 1050:数据表已存在。 1051:数据表不存在。 1054:字段不存在。 1062:字段值重复,入库失败。 1130:连接数据库失败,没有连接数据库的权限。...1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库。 1216:外键约束检查失败,更新子表记录失败。...处理程序可以处理条件、警告、未捕获的异常等。
这几天学习Laravel框架遇到了数据库方面的问题。...PDOException in Connector.php line 55:SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost...我用的是mysql数据库 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=...homestead DB_PASSWORD=secret 3.修改.env文件 将上述的部分做如下修改 DB_CONNECTION=mysql DB_HOST=[你的数据库地址] DB_PORT=[端口...(3306)] DB_DATABASE=[数据库] DB_USERNAME=[用户名] DB_PASSWORD=[密码】 修改后保存 4.重启服务 一开始改动的时候就是不成功,花了很长时间发现没有清理缓存
=mysql=/usr/local/mysql 三个类: PDO类, 数据库连接有关(连接、执行sql) PDOStatement 处理结果集 PDOException 异常处理类 一些常量 相比...' with message 'SQLSTATE[HY000]: General error' in E:\wamp\www\test\song.php:27 Stack trace: #0 E:\wamp...$e){ echo "数据库连接失败:"....; $pdo->commit(); }catch(PDOException $e){ echo $e->getMessage(); $pdo->rollback(); //只要捕获异常则回滚 } //...(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。
localhost;dbname=mysql", 'root', 'nothing'); // 密码随便填,故意写错 // 并没有手动抛异常 var_dump($pdo); } catch (PDOException...""; } echo "测试内置的异常类"; 结果如下: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost'...如果所在层的异常抛出后没有被本层捕获,就会寻找上层的捕获程序 多层异常嵌套 header('content-type:text/html;charset=utf-8'); try { try {..."--第二层"; throw new Exception('测试异常2'); // 当前层并没有catch捕获此异常,因此会到外层去寻找捕获 } } catch (Exception...自定义的异常处理器1--exceptionHandler_1 像处理异常一样处理错误 通过set_error_handler函数,我们可以捕获错误,像处理异常一样。
触发器: 触发器的使用场景以及相应版本: 触发器可以使用的MySQL版本: 版本:MySQL5以上 使用场景例子: 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写 每当订购一个产品时...'HY000' SET message_text = msg; END 结果: INSERT INTO products VALUES('demo2','1003','xiaoguo','66.6...'HY000' SET message_text = msg; 如果该SIGNAL语句指示特定SQLSTATE值,则该值用于表示指定的条件 “HY000”被称为“一般错误”: 如果命令出现一般错误,则会触发后面的...例二: 在COURSE表上创建触发器,检查插入时是否出现课程名相同的记录,若有则不操作。...未执行前的值,还可以引用一个名为NEW的虚拟表访问新更新的值; 在before update触发器中,NEW中的值可能也被更新(允许修改将要用于update语句中的值); OLD中的值全部只读,不能更新
这包括但不限于: 异常捕获:识别存储过程中发生的特定错误或异常。 错误记录:将错误信息记录到日志中,以便于后续分析和调试。 用户通知:向调用者或用户报告错误信息。...检测性策略: 异常捕获:使用try-catch块来捕获和处理异常。 断言:在代码中设置断言来检查程序状态是否符合预期。 日志记录:记录程序运行时的关键信息,以便在发生错误时进行分析。...'HY000' BEGIN -- 在这里可以记录错误日志或执行其他错误处理逻辑 -- 例如:INSERT INTO error_log (error_message...这通常在捕获到错误或异常时执行,以确保数据库状态不会因为部分完成的操作而处于不一致状态。...相反,应该使用具体的错误代码或SQLSTATE值来定义更精确的错误处理程序。 2. 使用日志记录错误 当异常发生时,应该将错误信息记录到日志中。
当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。...INSERT 表示插入记录时触发; UPDATE 表示更新记录时触发; DELETE 表示删除记录时触发。...2: 定义触发器“salary_check_trigger”,基于员工表“employees”的INSERT事件,在INSERT之前检查将要添加的新员工薪资是否大于他领导的薪资,如果大于领导薪资,则报sqlstate_value...为’HY000’的错误,从而使得添加失败。...'HY000' SET MESSAGE_TEXT = '薪资高于领导薪资错误'; END IF; END // DELIMITER ; 3、查看、删除触发器 查看触发器 查看当前数据库的所有触发器的定义
1.触发器简介 触发器即 triggers ,它是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。...触发器的名称在单个数据库内是唯一的。...在触发器主体中,可以使用 old 和 new 来引用触发器中发生变化的记录内容。...msg VARCHAR(100); -> IF NEW.s_id OLD.s_id THEN -> SET msg='不允许修改学号'; -> SIGNAL SQLSTATE...在业务逻辑复杂或表变动比较频繁的系统还是不推荐使用触发器,当然它也是有自己的应用场景,无论怎样,触发器的逻辑总是越简单越好,我们应该让数据库做它擅长做的事,不能想着所有逻辑都在数据库层面实现。
image.png 插入记录操作 <?...mysql:host=localhost;dbname='dashucoding','root','root'); // exec对select没有作用 // exec()执行一条语句并返回其受影响的记录条数...php }catch(PDOException $e) { die("Error!:".$e->getMessae().""); } ?...> pdo中捕获sql语句中的错误 使用默认模式 PDO::ERRMODE_SILENT pdo::errmode_silent 使用警告模式 PDO::ERROMODE_WARNING...int PDOStatement::errorCode(void) errorCode()方法返回一个sqlstate代码。 <?
三、pid文件不存报什么错 在MySQL数据库中,如果PID(进程ID)不存在,通常会报以下错误: ERROR 2002 (HY000): Can't connect to local MySQL server...ERROR 1049 (42000): Unknown database 看起来像是数据库不存在,但有时候也可能是由于服务器未运行导致的。...ERROR 2013 (HY000): Lost connection to MySQL server during query 客户端尝试连接到一个已经崩溃或不响应的服务器。...如果MySQL安装后没有PID文件,可能是由于配置文件中的pid-file参数未正确设置或MySQL服务未以预期的用户身份运行。...3、查看错误日志 MySQL的错误日志会记录详细的启动失败信息,在my.cnf中可看到 log-error=/var/log/mysqld.log,查看该文件以获取更多线索。
PHP中的PDO操作学习(三)预处理类及绑定数据 要说 PDO 中最强大的功能,除了为不同的数据库提供了统一的接口之外,更重要的就是它的预处理能力,也就是 PDOStatement 所提供的功能。...而且并不是所有数据库连接驱动都支持这个方法。...: SQLSTATE[IM001]: Driver does not support this function: This driver doesn't support setting attributes...这两个方法对于 MySQL 扩展驱动来说是不支持的,但是有其它的数据库是支持的,笔者没有测试过其它数据库,大家可以自行测试一下。...: SQLSTATE[HY000]: General error: Invalid column index while($row = $stmt->fetch(PDO::FETCH_BOUND)){
SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。...代码如下: //方法一:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='CAN NOT FIND'...第一种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为42S02,执行CONTINUE操作,并且输出"CAN NOT FIND"信息。...SQLWARNING捕获所有以01开头的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。第五种方法是使用NOT FOUND。...SQLEXCEPTION捕获所有没有被SQLWARNING或NOT FOUND捕获的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。
SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。...【示例5】 下面从employee表中查询id为2的记录,将该记录的d_id值赋给变量my_sql。...代码如下: //方法一:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='CAN NOT FIND'...第一种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为42S02,执行CONTINUE操作,并且输出"CAN NOT FIND"信息。 ...SQLEXCEPTION捕获所有没有被SQLWARNING或NOT FOUND捕获的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。
例如,在 ERROR 1418 (HY000) 中,1418 是 MySQL_error_code,'HY000’是 sqlstate_value。...SQLWARNING 或 NOT FOUND 捕获的 SQLSTATE 错误代码; 处理语句:如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。...定义处理程序的几种方式,代码如下: #方法1:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info = 'NO_SUCH_TABLE...在存储过程中,定义处理程序,捕获 sqlstate_value 值,当遇到 sqlstate_value 值为 23000 时,执行 EXIT 操作,并且将 @proc_value 的值设置为 - 1。...、向后定位一条记录,或者是 随意定位到某一条记录 ,并对记录的数据进行处理。
SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。...【示例14-5】 下面从employee表中查询id为2的记录,将该记录的d_id值赋给变量my_sql。...第一种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为42S02,执行CONTINUE操作,并且输出"CAN NOT FIND"信息。...SQLWARNING捕获所有以01开头的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。第五种方法是使用NOT FOUND。...SQLEXCEPTION捕获所有没有被SQLWARNING或NOT FOUND捕获的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。
例如,在ERROR 1418 (HY000)中, 1418 是MySQL_error_code,'HY000’是sqlstate_value。...或NOT FOUND捕获的SQLSTATE错误代码; 处理语句 :如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。...定义处理程序的几种方式,代码如下: #方法1:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info = 'NO_SUCH_TABLE...在存储过程中,定义处理程序,捕获sqlstate_value值,当遇到sqlstate_value值为 23000 时,执行EXIT操作,并且将@proc_value的值设置为-1。...向后定位一条记录,或者是随意定位到某一条记录,并对记录的数据进行处理。
领取专属 10元无门槛券
手把手带您无忧上云