84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
PDO::ERRMODE_EXCEPTION PDO::ERRMODE_WARNING 区别是什么?
我怎么看了以后,觉得这俩除了反馈信息的格式不一样外,别的看起来都一样?
就是讲解的时候有个"抛出"一词,谁可以简单的跟我说说什么区别?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
异常模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
这个模式需要配合 try 使用 :一旦出错,就会:
创建一个对象,$e 也可以随便命名,从 $e->getMessage() 获取错误信息;
采取动作;
try{ 要执行的命令... }catch(PDOException $e){ echo "执行命令失败:".$e->getMessage(); 失败后的动作... }
这个其实等于 缺省模式的 if($pdo->errorInfo()[2]) ...
缺省模式
if($pdo->errorInfo()[2]) ...
创建PDO的时候,为什么也用 try?因为这时候连PDO对象都没有,所以也不能设置错误模式,所以可以用try,一旦PDO创建成功,错误模式就成了 缺省模式,也就不能用try了.
缺省模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
这个出错,会给 $pdo->errorCode() 和 $pdo->errorInfo()[2] 赋值;
$pdo->errorCode()
$pdo->errorInfo()[2]
可以用 if($pdo->errorInfo()[2])和if($pdo->errorCode()) 判断脚本是不是出错.
if($pdo->errorInfo()[2])
if($pdo->errorCode())
如果不出错,上面都是空的;
警告模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
这个会echo出一个错误信息,打乱了脚本;学习调试的时候使用比较好;真用起来的时候,很多时候判断不出到底脚本有没有出错;
请注意PHP的错误等级一文。
Warning级别的错误,会直接显示在页面上,且无法自行根据错误处理相关的业务逻辑。Exception则是抛出一个可以被捕获的Exception对象,可以获取到详细的异常信息。
Warning
Exception
try { $stmt = $pdo->prepare("select * from id = :id"); // PGSQL严格限制数据类型,serial字段使用字符串字段进行匹配将会出错 $stmt->bindValue(':id','string',PDO::PARAM_STR); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { // PDO执行出错时执行 // 可以捕获到PDO抛出的异常,可以获取到详细的错误代码,错误描述,哪个文件第几行出错,本次请求中所有执行的文件等等 var_dump($e); }
错误模式说明:
异常模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
这个模式需要配合 try 使用 :
一旦出错,就会:
创建一个对象,$e 也可以随便命名,从 $e->getMessage() 获取错误信息;
采取动作;
这个其实等于
缺省模式
的if($pdo->errorInfo()[2]) ...
创建PDO的时候,为什么也用 try?
因为这时候连PDO对象都没有,所以也不能设置错误模式,所以可以用try,
一旦PDO创建成功,错误模式就成了
缺省模式
,也就不能用try了.缺省模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
这个出错,会给
$pdo->errorCode()
和$pdo->errorInfo()[2]
赋值;可以用
if($pdo->errorInfo()[2])
和if($pdo->errorCode())
判断脚本是不是出错.如果不出错,上面都是空的;
警告模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
这个会echo出一个错误信息,打乱了脚本;
学习调试的时候使用比较好;
真用起来的时候,很多时候判断不出到底脚本有没有出错;
请注意PHP的错误等级一文。
Warning
级别的错误,会直接显示在页面上,且无法自行根据错误处理相关的业务逻辑。Exception
则是抛出一个可以被捕获的Exception
对象,可以获取到详细的异常信息。