- - PR -
PHP4+postgres で $result->close()すると結果が消える
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-26 21:59
@ITのDAOのサンプルってこれ? http://www.atmarkit.co.jp/flinux/rensai/mysql5_06/mysql5_06d.html ソースコード的にはそっくりだけど。 以下、もしそうなら。
これで、$resultに入っているのが何か調べてみればわかるかも。 現状は、$result->close()で冬寂さんが書かれているようにエラー起こしてる気がします。 | ||||||||||||
|
投稿日時: 2007-12-26 22:30
あぁ、なるほど。元ソースはmysqliですか・・。mysqliはmysqliクラスが定義済みで、mysqli->queryの戻り値は「結果オブジェクト」ですね。マニュアルにも$result->close()の記述があります。
http://www.php.net/manual/ja/ref.mysqli.php http://www.php.net/manual/ja/function.mysqli-query.php 残念ながらPostgreSQL関数はそういうわけにはいきません(mysql関数も同様です)。 http://www.php.net/manual/ja/ref.pgsql.php http://www.php.net/manual/ja/ref.mysql.php | ||||||||||||
|
投稿日時: 2007-12-27 09:09
kalze様、shimix様
アドバイス有難うございます。 returnの前にエラーを起こしていてreturnまで進まなかったのですね。 javaのようにtry chatchが使えるといいと思いました。 mysqliクラス固有のものだったのですね。何とも当たり前のようなコードでしたので何も疑わずに書いてしまっておりました。 色々と勉強になりました。 | ||||||||||||
|
投稿日時: 2007-12-27 09:47
javaを勉強されていたなら知っているかもしれませんが、深いコピー&浅いコピー(deep copy & shallow copy)について調べておくとよいかもしれません。 php4の時には明示しない限り深いコピーが使われていて、下手に作られたライブラリを使うと、深い&浅いコピーがごっちゃになって訳が分からなくなる事がありました。 (返す側と呼び出す側で参照を明示しておかないと訳が分からなくなる。) php5からは、objectは全て浅いコピー、という事になっているので混乱は無くなった(と思います)。 (明示的に深いコピーを使うには、cloneを使う。)
だからphp5を使え(ry (まぁ、使えない理由があるのは見ましたが。) あと、何かを参照した場合は、それを書いておいていただけると答える時に楽になる事があります。 | ||||||||||||
|
投稿日時: 2007-12-27 13:14
冬寂様
毎度アドバイス有難うございます。 deep copy & shallow copy 勉強になります。 オブジェクトが参照渡しになるのはPHP5からのようですね。 なので今回の場合は参照渡しになっていた訳ではなく、かつ$result->close();っていうのでエラーが発生していたという事ですね。 エラーをつかまえたかったらPHP5で、という事で良く理解できました。 |