-1

PHP5 と PDO で mysql クエリを実行しています。

try/catch を使用してクエリからの例外を処理しようとしています。しかし、たとえば、次のような構文エラーがある場合:

try{
    $sql = 'IggggNSERT INTO t_table (ID, MONTH) VALUES (:ID, :MONTH)';
    $r = $conn->prepare($sql);
    $r->bindValue(':ID', $id);
    $r->bindValue(':MONTH', $month);
    $r->execute();
    return $r;
}
catch (Exception $e) {
    die('Error');
}

この致命的なエラーが発生します:

PHP Fatal error:  Call to a member function bindValue() on a non-object

しかし、例外は発生せず、私の catch ブロックは実行されません。

以前のクエリをロールバックできるように、これをどのように処理できますか?

4

1 に答える 1

1

問題が PDO 内で発生した場合にのみ、PDO は例外をスローします。あなたが得ているエラーは、$r->bindValue$r が初期化に失敗したにもかかわらず、あなたがアクセスしたことに関連しています。

通常の操作では、SQL で構文エラーが発生することはありません。

ただし、データベース ファイルに次の行を設定してみてください。

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

私が PHP.NET から理解している限り、この行が設定されている場合、prepare() は例外をスローします。これにより、catchステートメントが開始されるはずです。

PHP.NET PDO::準備

データベース サーバーがステートメントの準備に成功すると、PDO::prepare() は PDOStatement オブジェクトを返します。データベース サーバーがステートメントを正常に準備できない場合、PDO::prepare() は FALSE を返すか、PDOException を発行します (エラー処理によって異なります)。

于 2013-10-03T16:43:28.970 に答える