先日の記事にも記載した、
「fuelPHP で PDOを使ってOracle接続する時の注意点」
ですが、他にもCoreに手を入れる必要があったのでメモ。
前回の記事はOracleデータベースに接続する時のエラーでしたが、今回はレコードをInsertする時のエラーです。
何もしないで標準のまま使うと、DB::query() でinsert文を実行すると、
PDOException [ IM001 ]:
SQLSTATE[IM001]: Driver does not support this function: driver does not support lastInsertId()
こんなエラーが発生します。
これは、MysqなどlがサポートするAUTO_INCREMENT(自動的に連番を取得してインサートする機能)をOracleがサポートしていないにもかかわらず、fuelPHPのコアクラスがPHPのPDO::lastInsertId ()関数を実行していることが原因です。
対策としては、以下のようにしました。
fuel/core/classes/database/pdo/connection.php
の328行目あたり、
どうせOracleがサポートしていないので、lastInsertId()を呼ぶどころはコメントにして、一律0をセットするようにしました。
elseif ($type === \DB::INSERT) { // Return a list of insert id and rows created return array( //T ここコメント $this->_connection->lastInsertId(), '0', //T 一律0を返すようにしとく。 $result->rowCount(), ); }
コメントを残す