

`PDO::ERRMODE_EXCEPTION`のとき、

[code]

    try {
        $stmt = $pdo->prepare("SELECT * FROM po");
        $result= $stmt->execute();
        if (!$result) {
            throw new Exception ("execute_false");
        }
    } catch (Exception $e) {
        var_dump($e->getMessage());
    }
    
[/code]

とすると、  
`Base table or view not found: 1146 Table 'hoge_table.po' doesn't exist`  
となり、`execute()`が`false`ではなく例外を投げているような気がします。

しかし、[ドキュメント](http://php.net/manual/ja/pdostatement.execute.php)を見ても、executeが例外を出すという記述はありません。たとえば[prepare](http://php.net/manual/ja/pdo.prepare.php)のところには例外を吐くと書かれています。

これについて、`execute`が例外を出したのではなく、`prepare`の例外が  
`execute`の実行により起こり、`execute`が例外を出したように見える、という解釈で正しいのでしょうか？

また、`execute`自身が`false`を返す失敗とはどのようなものなのでしょうか。

よろしくお願いします。


CC BY-SA 3.0
2018-02-08T09:25:59.360
41581
2022-03-31T00:06:45.667
2018-02-08T12:59:42.333
27332
27332
question
php pdo
PHPのPDOStatement::executeが失敗したとき、Falseを返すのかExceptionを投げるのか


`PDO::ERRMODE_EXCEPTION` が設定されるとexecute();でのエラーもPDOExceptionがなげられます。

`$stmt->execute();` が`false`を返す失敗は、SQLの文法に誤りが有る時と  
`?`が指定されたが 渡すパラメータが指定されなかった時です。

**falseを返す例、文法に誤り**

[code]

    $stmt = $pdo->prepare("wSELECT * FROM test where test = ?");
    $stmt->execute(array('test1'));
    
[/code]

**渡すパラメータが指定されなかった**

[code]

    $stmt = $pdo->prepare("SELECT * FROM test where test = ?");
    $stmt->execute();
    
[/code]


CC BY-SA 3.0
2018-02-08T11:09:50.607
41585
2018-02-08T11:33:14.730
2018-02-08T11:33:14.730
22793
22793
41581
answer