-1

簡単に言えば。データベースクエリを処理するクラスがあり、渡されたステートメントタイプに応じて、ある時点でフォークします。だった場合SELECT、何かを行います。それが (successful) だった場合INSERTUPDATEまたはDELETE何か他のことをした場合。私はそれを判断するために頼ってPDOStatement::rowCountいましたが、以前のシステムではうまくいきました。ただし、クラスを別のサーバーに移植した後、動作が変更されました (ステートメントPDOStatement::rowCountによって返される行の量が返されるようになりました)。そのような動作が発生する可能性があり、一貫性がなく、データベースに依存していることSELECTをPHPマニュアルで読みました。

だから私の質問。どのタイプのステートメントが PDO に渡されたかを判断する別の簡単な方法はありますか? ステートメントの構文を分析してクラスに追加するメソッドを作成するだけでよいと思いますが、おそらく他の方法 (組み込みメソッド?) がある場合は、車輪の再発明を試みる必要はありません。ありがとう。

4

1 に答える 1

0

PDO::ATTR_ERRMODE最初に属性を設定します。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

それで...

try {

    $stmt = $pdo->prepare($sql);
    $stmt->execute($values);

    try {

        $rows = $stmt->fetchAll();

        /* The SQL was SELECT */

        $count = count($rows);


    } catch (PDOException $e) {

        /* The SQL was INSERT, UPDATE or DELETE */

        $count = $stmt->rowCount();

    }

} catch (PDOException $e) {

    /* Execution Failure */

    $error = $e->getMessage(); 

}
于 2014-07-05T22:29:29.143 に答える