PostgreSQL及びPHPに関する質問です。
phpからPostgreSQLに接続して下記(一部抜粋)コードが実行しようとしたところ、動作が止まってしまったのでご質問致します。
PHP
1$sql = ""; 2$sql .= "SELECT nextval(pg_catalog.pg_get_serial_sequence('info', 'id'));"; 3$stmt = $this -> _db -> mdb2 -> prepare($sql); 4$res = $stmt -> execute();
初心者であまり詳しくないのですが、デバッグ等してみたところmdb2からPostgreSQLへの接続は問題なく行われているのですが、$stmt内部には下記のようなMDB2 Errorが格納されていました。
[Native message: ERROR: 現在のトランザクションがアボートしました。トランザクションブロックが終わるまでコマンドは無視されます]
実行環境は以下の通りです。
CentOS release 6.8 (Final)
PHP 5.3.3
postgres (PostgreSQL) 8.4.20
PostgreSQLに接続して実行するときは上記抜粋した場所以外も同じコードでできており、それらは全てうまく動作しているので、nextvalを使うときだけエラーが起きて正直なところ何が問題なのか見当が付きません。
実際に$sqlの内容をphpPgAdminを用いてそのままSQL実行するとエラーが起こらずうまくいきます。
何が問題なのかご教示頂ければ幸いです。
必要な情報などがあれば仰っていただければ随時追加致します。
以上です。
※追記
すみません。書き忘れていました。
現在php、postgres等バージョンアップをした関係で動作検証している状況です。
旧環境をそのまま移行して検証しているのですが、その中に下記コードが記載されており
php
1$sql = ""; 2$sql .= "SELECT currval(pg_catalog.pg_get_serial_sequence('info', 'id'));"; 3$stmt = $this -> _db -> mdb2 -> prepare($sql); 4$res = $stmt -> execute();
前環境では動作していたのですが、実行したところエラーになりました。
検索するとcurrval実行前にnextvalを実行しなければエラーになるというような記事を見つけたのでとりあえずnextvalだけでも動作させてみたいというのが経緯です。
以上です。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。