[PHP-users 13844] Re: SQL文の作成

fumiyaKitamura php-users@php.gr.jp
Sat, 8 Mar 2003 11:45:18 +0900


キタムラです。

だいたい、田村さんのやりたい事が見えてきました。
(ハマりが悪くて申し訳ないっス(笑))


> 今回、関数を呼ばずに実行部に、関数部分を直接書込みテストしました。
>  うれしいことに、思い通りにできました。(大感謝)

実行部に書いてうまく行ったのは、

> $set .= (strlen($dat) == 0)? "{$key}=NULL,": "{$key}='${$dat}',";

の「${$dat}」で呼び出される変数が関数の中からは見えなかったからだと
思います。関数内でglobal定義すれば見えると思いますが、そうすると
関数化するメリットが無くなってしまいますね。

実行するスクリプトの先頭に

error_reporting(E_ALL);

を追加すれば、未定義変数のエラーとか全てのエラーが見れますよ。


> 「,=NULL」の部分が邪魔をして、動きません。

ここは「イ)」の「(strlen($dat) == 0)」を見直せば行けるのかな?
でも、本当にNULLにしたい時とかはまた考える必要がありそうですね。
(呼び出し元で''がセットされていた時にNULLに変更するとか...)


>> # 私にはこの方向性でのモジュール化にあまりメリットは感じられません。
>  モジュール化しなければ、うまくいきました。(ちょっと、意味のすれ違いが
> あるかな〜)

考え方、モジュール化の落としドコロは人それぞれだと思います。

便利だと思って作った関数がプロジェクトを進めているうちに、色々な
シチュエーションに対応できなくて意外と不便だったりとかしょっちゅうです。

私は前に投稿した関数ぐらいが一番使いやすいと「自分の使い方」や
「今までの経験」や「関数が完成するまでのスクラップ&ビルド」から判断
しました。

食事も関数の作り込みも「ちょっと足りないかな」ぐらいが一番ではないかと...


あと質問とは直接関係ないですが、関数の内部で

>   $conn = mysql_connect($svname, $usname, $psname);

のようにDB接続をするのはあまり良くないです。

DB接続は処理コストがかかる(MySQLもそうですよね?)ので、関数の外部で
DBに接続して関数には$connを渡した方がいいです。
(またはクラス化を検討するのもお勧めです)

このままだと関数が1プログラムの中で100回呼び出されるとDB接続が100回
発生します。


=================<F.Kitamura>=================
E-Mail  : fkit@sys238.jp
---
The greatest enemy of man is alcohol.
But, The Bible tells us to love our enemy.
==============================================