mysql:9278
From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Fri, 23 Apr 2004 01:23:44 +0900
Subject: [mysql 09278] Re: MySQL+DBI/DBD+Apatchのログについて
川合孝典です。 #大分、酔っ払った状態で書いているので妙な事はあるかもしれ #ませんが ----- Original Message ----- From: "yoshi" <yosihisa@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Thursday, April 22, 2004 10:56 AM Subject: [mysql 09260] Re: MySQL+DBI/DBD+Apatchのログについて > yoshiと申します。 > 私もPerlでDBIインターフェースを使用しているのですが、疑問が > ありますので、質問させてください。 > > >またDBIの常識として > >(1)use strict(Perlの常識レベルですが)、プレースホルダを > > 使ったほうがよいでしょう。 > > と書かれていますが、その理由はなぜなのでしょうか? > (常識がなくてすみませんが・・・・) > use strictは「変数が初期化していないとエラーになる」と > 認識しているのですが、それがなぜDBIを使うときに推奨される > のでしょうか? まず「初期化されていない」かどうかをチェックするのは-wですよね? use strictは変数などの宣言を求めるということになります。 なぜ「Perlの常識レベル」かといえば、ラクダ本(プログラミングPerl)で 「保守する人の効率をあげるためのヒント」などで記述されている ということがあります。 ことDBIに関してはdbi-users(DBIのメーリングリスト)で、use strictして いれば一発でコーディングミスというケースがあまりにも頻発していた ことがあります。「DBIを使う」=「ワンライナーじゃない」ということでは ある意味、必然だと思っています。 少なくともstrongly recommendになってからは、その手のしょーもない 質問は減ったように感じています。 > プレースホルダについては、使うと見やすくなるという利点は > あると思うのですが、ディバッグのときprint文でsqlを見ようと > すると、肝心なところが?と表示されてしまい役に立たなく > なります。これはかなり重要な欠点ではないでしょうか? なぜプレースホルダがあるかといえば最大の理由はOracleが プレースホルダをサポートしているということがあるだろうと思って います。Oracleではプレースホルダの部分を置き換えたSQLを 発行するのではなく、prepareにより一旦コンパイルしたSQLに 対してバインド変数を指定してexecuteするというのは当然の手法 といえます。最近のPostgreSQLでもプレースホルダ(あるいはprepareを 有効にする)がAPIレベルでサポートされています。 またAPIでプレースホルダをサポートしていなくても、prepareの時点で どこにプレースホルダがあるのかをチェックしておけば処理効率は あがります。さらに単に埋め込むだけでなく、エスケープをしながら 埋め込んでもらえるという利点もあります。変数の値にシングルクォートが 入っている場合、単純にSQLに埋め込むというわけにはいかないでしょう。 (そのためにquoteメソッドがあるわけなんですが) またデバッグについては、traceを設定すれば実際に投げている SQLはわかるはずです。さらにShowErrorStatementプロパティを 設定すればエラーのさい、組みたてられたSQLが見えるはずです。 =================================================== 川合 孝典 (Hippo2000) DBI日本語メーリングリスト管理人、Kansai.pm所属 kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/ perldocの日本語情報ならperldocjp:翻訳してみませんか? http://perldocjp.sourceforge.jp/ ===================================================
9241 2004-04-20 23:37 ["Atusi Taga" <call_f] MySQL+DBI/DBD+Apatchのログについて 9243 2004-04-21 00:30 ┣["KAWAI,Takanori" <GC] 9260 2004-04-22 10:56 ┃┗[yoshi <yosihisa@xxxx] -> 9278 2004-04-23 01:23 ┃ ┗["KAWAI,Takanori" <GC] 9247 2004-04-21 09:41 ┗[Takasi Watanabe <off]