[前][次][番号順一覧][スレッド一覧]

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/hippo2000http://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]