mysql - php pdo 缺省错误模式 和 例外模式,差不多,为什么弄两个?

WBOY
풀어 주다: 2016-06-06 20:07:23
원래의
1343명이 탐색했습니다.

先说 缺省模式

<code>$pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_SILENT);</code>
로그인 후 복사
로그인 후 복사

我做的实验中,出错后,会给 $pdo->errorCode() 和 $pdo->errorInfo() 赋值;通过调用他们可以可以 看 错误的详细信息;


然后说例外模式

<code>$pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);
try{

}catch(PDOException $e){
    echo "执行命令失败:".$e->getMessage();
    exit;
}</code>
로그인 후 복사
로그인 후 복사

会实例出一个 $e 对象,错误信息保存在这个属性里.

都是有错误信息,为什么要分两个属性?

回复内容:

先说 缺省模式

<code>$pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_SILENT);</code>
로그인 후 복사
로그인 후 복사

我做的实验中,出错后,会给 $pdo->errorCode() 和 $pdo->errorInfo() 赋值;通过调用他们可以可以 看 错误的详细信息;


然后说例外模式

<code>$pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);
try{

}catch(PDOException $e){
    echo "执行命令失败:".$e->getMessage();
    exit;
}</code>
로그인 후 복사
로그인 후 복사

会实例出一个 $e 对象,错误信息保存在这个属性里.

都是有错误信息,为什么要分两个属性?

/*错误模式说明:

<code>

◆异常模式:
    $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);

    这个模式需要配合 try 使用 :
        一旦出错,就会:
        1.创建一个对象,$e 也可以随便命名,从 $e->getMessage() 获取错误信息;
        2.采取动作;

        try{
            
            要执行的命令...

        }catch(PDOException $e){
            echo "执行命令失败:".$e->getMessage();
            失败后的动作...
        }

    这个其实等于 ◆缺省模式的 if($pdo->errorInfo()[2]) ...

    创建PDO的时候,为什么也用 try?
        因为这时候连PDO对象都没有,所以也不能设置错误模式,所以可以用try,
        一旦PDO创建成功,错误模式就成了 ◆缺省模式,
        也就不能用try了.
</code>
로그인 후 복사
<code>◆缺省模式:
    $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_SILENT);

    这个出错,会给 $pdo->errorCode() 和 $pdo->errorInfo()[2] 赋值;

        可以用 
            if($pdo->errorInfo()[2]) 
            if($pdo->errorCode()) 
        判断脚本是不是出错.

    如果不出错,上面都是空的;
</code>
로그인 후 복사
<code>◆警告模式:
    $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_WARNING);

    这个会echo出一个错误信息,打乱了脚本;
    学习调试的时候使用比较好;
    真用起来的时候,很多时候判断不出到底脚本有没有出错;
</code>
로그인 후 복사

*/

你太纠结了...这是为了方便使用者,为啥一定要有个为什么。就像是有些API通过参数可以选择返回json还是xml,有什么特别的意义吗?也是为了方便而已。

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿