Perl::DBI
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/12 23:35ID:xHkBB9i/DBI.org
http://DBI.perl.org
DBI-ML-J
http://member.nifty.ne.jp/hippo2000/dbi/dbi_japan.htm
DBI.pm 日本語訳
http://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm
「よく分からないエラーが出てしまいます」じゃ誰だって教えられないよ。
0041nobodyさん
02/12/14 17:32ID:R1uTGzYK0042nobodyさん
02/12/14 20:27ID:???0043nobodyさん
02/12/14 21:21ID:???排他処理が不安で使ってない香具師
0044名無しさん@お腹いっぱい。
02/12/14 22:14ID:???ログ100件ぐらいだったらファイルで充分だったりする。
0045nobodyさん
02/12/15 01:44ID:???パフォーマンス出せたりする。
DBI DBDはインストールできればあとはSQLの書き方なわけで
DBIは常用していても話題がないのよ。
0046nobodyさん
02/12/17 08:30ID:PsoYCNCf最近、DBD::CSVがバージョンアップしてJOINもできるようになったYO!
とか色々あるだろ。なんか、PHPはDBとの連携ができるけどPerlは
できないとか変な偏見があるみたいだからちょっと悔しかったりする。
0048nobodyさん
02/12/19 20:40ID:???かわいそうな人達なのでやさしく教えてあげてください。
0049nobodyさん
02/12/27 03:32ID:s3+SF1Z2Perlはプログラマによって非常に観やすくいい仕事するCGIと
非常に乱雑で適当に仕事するCGIに大きく分かれるよね。
PHPもエラーメッセージがブラウザで確認されてしまうのが厄介。
(というかカッコワルイ)
CPANモジュールも普通にXで使うのなら便利なんだけど・・
ウェブサイト用CGIとして使うと余計なモジュールが多すぎてヘタすりゃ
いらないモジュールまで取り込んでしまうプログラマもいるみたい。
(そういう人は影で笑っておけば・・・済まないか w)
0050nobodyさん
02/12/27 07:12ID:wZxYN2FO0051nobodyさん
02/12/27 19:09ID:???>PHPもエラーメッセージがブラウザで確認されてしまうのが厄介。
>(というかカッコワルイ)
貴殿はPHPを使ったことが無いとお見受けしました。
0052nobodyさん
02/12/29 13:20ID:???いらないモジュールuseしても問題ないだろ。
>CPANモジュールも普通にXで使うのなら便利なんだけど・・
xで使うねぇ・・・
貴殿はちょっとLinuxかじった房
だとお見受けしました。
0053nobodyさん
02/12/29 15:27ID:???> いらないモジュールuseしても問題ないだろ。
いやー、問題ないとは言えないでしょ。
メモリの無駄だし、標準関数をオーバーライドするモジュールもあるし。
インストールは、ディスクが無駄な以外問題ないと思うけど。
>>49 の「取り込む」の意味が不明なので話の前提がわからんが、
49がアレだというのには同意する。
0054nobodyさん
03/01/13 21:30ID:GwIzQASu0055山崎渉
03/01/15 13:32ID:???0056山崎渉
03/03/13 17:41ID:???0057nobodyさん
03/03/13 20:56ID:tDY9NfKcなんにも分かってない状態なので、
とりあえず“入門Perl DBI”を注文してあるのですが、
それが届くまでの間、どこかに分かりやすいサイトがないものかと。
いろいろ見て回ったものの、正直、ぜんぜん理解できませんでした・・・
ってことは、本を買っても理解できないってことになるのだろうか・・・
あと、入門書として“入門Perl DBI”は最適でしょうか?
0058nobodyさん
03/03/13 21:50ID:???自分の空間にしかインポートされないから、勝手に汚染されることはないじゃろ。
どうせモジュールなんてmod_perlがキャッシュしてくれるから、分かりやすいように書けばよろしい。
use hogehoge ();
0059nobodyさん
03/03/13 21:56ID:???もっとまともな説明は、
use モジュールの名前 (インポートする関数名のリスト);
2つ目のリストが省略されたら、モジュールのデフォルトのものがインポートされる。
もちろん、デフォルトが何もインポートしない、になっているかもしれない。
つまり、、、
use Module () と、require Moduleは、いつ読み込まれるか、っていう違い(コンパイル時、
実行時)はあるけれど、結果的には同じことがおきる。
0060nobodyさん
03/03/13 21:59ID:???0061nobodyさん
03/03/14 00:56ID:???0062nobodyさん
03/03/14 02:37ID:???0063eval "require hoge;";
03/03/14 13:06ID:YuEJwOb3require → モジュールが読み込まれるだけで、インポートはされない。成功すれば真の値をかえす。
という理解でいいかな。
0064nobodyさん
03/03/14 15:05ID:???use Module @list は
BEGIN { require Module; Module->import(@list) } と等価、
no Module @list は
BEGIN { Module->unimport(@list) } と等価だ。
import 関数は Perl 標準の Exporter モジュールから
継承してるケースが殆どだから、シンボルの輸出入に
関する仕組みは Exporter の POD を読めば理解できる。
しかし import を自前で実装してるモジュールもあるし、
require した段階で main パッケージに割り込む行儀の
悪いモジュールもある。よって use Module (); で確実に
輸入規制ができるとは限らない。
use は sub NAME と同じく宣言だから戻り値は無い。
my $rv = use Module; は構文エラーになるし、無理矢理
my $rv = eval { use Module; }; 等としても undef が入るだけ。
0065nobodyさん
03/03/14 22:37ID:???このあたりは、Perl教なら、リビングの法則でなんとか説明するところかな。(?)
0066nobodyさん
03/03/19 10:36ID:???0067nobodyさん
03/03/30 17:35ID:vpWCaSDoてゆーか誰も作ってないってことは難しいのかなぁ。
0068nobodyさん
03/03/30 17:51ID:Uipu2S6m006967
03/03/30 18:01ID:???いや、今はWindowsXP+ActivePerl+DBD::ODBCなんですけど、
例えばLinuxのレンタルサーバーのUserディレクトリとかで
手軽に使えたらいいなーって思ったんですけど。
0070nobodyさん
03/03/30 19:32ID:???0072nobodyさん
03/03/30 21:14ID:???0073nobodyさん
03/04/07 00:02ID:btpU8pX3てゆーかPerlの256本ってこれだけだよね?
Rubyはいっぱい出てるのに。
0074nobodyさん
03/04/15 23:44ID:Tnm/ZADI使えるかと思いきや、中でText::CSV_XS使っているという罠。
0075山崎渉
03/04/17 12:01ID:???0076nobodyさん
03/04/20 00:04ID:CCxtB9hmあれいいね。
0077山崎渉
03/04/20 00:29ID:???0078動画直リン
03/04/20 00:40ID:dAQHn3gv0079山崎渉
03/04/20 05:57ID:???( ^^ )< ぬるぽ(^^)
0080山崎渉
03/05/22 02:08ID:???0081山崎渉
03/05/28 17:17ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0082nobodyさん
03/05/30 14:30ID:I8fiUs9e試したんだけど、どうしてもベンチマークとると速度が遅い。
やっぱりSQL解析部分で時間食うみたいだった。
しょうがないのでSQL解析部分を自作して速度の問題を解決。
DBDは一から作るのめんどいのでDBD::Templateを使いました。
もうこれからは掲示板だろうがなんだろうがDBI使い倒してやる。
0083nobodyさん
03/05/31 06:20ID:rt7PEdog速度改良されたpmファイルアップキボンヌ
0084nobodyさん
03/05/31 23:01ID:oQuJYHeZhttp://endou.kir.jp/betu/linkvp/linkvp.html
http://s-rf9.free-city.net/page006.html
008582
03/06/03 16:07ID:lz5wO9wKSQL解析部分は見てもらえば分かりますが「ナンチャッテSQL解析」なので、
自分のプログラムに合わせて処理を付け足す必要があります。
速度とプログラムの汎用性という意味では自分的には実用的かと思います。
http://webcolle.minidns.net/perl/
0086nobodyさん
03/06/06 11:28ID:???すばーらスィ!!!!!!
sql文の練習に使えます。ありがと。
こんど、オンラインでやってみます。
postgressql+pg.pmでやるのとどっちが速いかは、
やっぱデータ量によるんでしょうね。
008782
03/06/06 16:33ID:q9w0p8v1所詮データはCSVファイルなので本物のRDBMSとは比較になりません。
・CSVに対してSQLが使える。
・DBIを使うことでプログラムの汎用性がある。
・速度的にも掲示板のログ管理程度なら実用レベルである。
・PurePerlなのでレンタル鯖等でも使える。
メリットはこんなところでしょうか。
ちなみにテーブル定義とSQL解析はプログラムごとに
付属のdbisub.plをいじらなければなりませんので。
0088nobodyさん
03/06/06 22:17ID:???ところで、川合さんの「PerlでDBI」(256倍シリーズ)買ったけど、ちょちょっ
と見ると、DBDの分類で、「自作系 (1)sqlの解析にSQL::Statementを利用」
の中に、DBD-CSVってのがある(DBD-Fileを継承)けど、>>85のは、それの兄弟
のようなものかね。
008982
03/06/08 01:44ID:???↓のURL見た方が早いかもしれませんが、中身は本の中で紹介されてた
SomeFmt.pmを少しいじっただけだと思います。
http://www.hippo2000.info/cgi-bin/KbWiki/KbWiki.pl?cmd=disp&page=DBD%3a%3aTemplate
なんか作者でもないのに勝手に宣伝してるみたいでなんか
悪いことしてる気がしてきた・・・
0091山崎 渉
03/07/15 11:13ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0092nobodyさん
03/07/24 20:46ID:???0093nobodyさん
03/07/24 21:41ID:???0094山崎 渉
03/08/02 02:24ID:???( ^^ )< ぬるぽ(^^)
0095ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:53ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0096nobodyさん
03/10/30 20:20ID:MsIzuyZ0DBD::ODBC使えって?UNIXでも使いたいんだよ。
0097nobodyさん
03/11/01 19:09ID:ryreETR00098nobodyさん
03/11/01 19:40ID:???0099nobodyさん
03/11/06 11:41ID:+rjyvfMX0100nobodyさん
03/11/07 12:36ID:???それ以降は、commit するまで1つのトランザクション
0102nobodyさん
03/11/20 16:24ID:5vqTDfspMySQLではどういった形になるのでしょうか。
只今移行中です。
MySQLの場合はfechrowはあるのですけどgetvalueが無いので
困ってます。
PostgreSQLでのDBアクセスはPgモジュール、MySQLでは
http://www.atmarkit.co.jp/flinux/rensai/mysql04/mysql04a.html
この方法をとりました。
どうか教えてください。
0103nobodyさん
03/11/20 16:44ID:???build できた経験のある人っていませんか?
0106nobodyさん
04/01/01 17:37ID:P0LnBj0e$word = "It's";
$word =~ tr/'/\\\'/;
$sth = $mydb->prepare("insert into $TABLE_name values ('$word');");
$sth->execute() ;
$sth->finish();
$mydb->disconnect();
ってやったとき"It's" の ' が消えて "Its"で登録されちゃうんですけど、どうすれば回避できますか?
$word =~ tr/'/''/; もやったけど、
DBD::Pg::st execute failed: ERROR: parser: parse error at or near "s" at character 86
ってでます。 quoteって関数使えば良いらしいけど、使い方が良くわかりません。
識者の方々殿。 よろしくお願いします。
0107nobodyさん
04/01/01 17:59ID:???http://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm
- $word =~ tr/'/\\\'/;
+ $word =~ s/'/\\'/g;
0108106
04/01/01 18:13ID:P0LnBj0e出来たー! 有難う。 昨日からずーーっとこれでハマッってたっす。
ところで - と + ってどういう意味?
0109106
04/01/01 18:29ID:P0LnBj0eAFOでスマソ
0110nobodyさん
04/01/01 19:11ID:???> ところで - と + ってどういう意味?
unified diff
ところで確認せずに言うけど
$sth = $mydb->prepare("insert into $TABLE_name values (?)");
$sth->execute($word);
ってやったら勝手にエスケープされんかい?
0112106
04/01/03 12:41ID:2IxFJ5oW出来ました。勉強になりました。
ありがとうございます。
0113nobodyさん
04/01/15 19:42ID:AedXtgQupush @array,$row[0];
}
print join(" ",@array);
これでレコードは全て数値で返ってくるとして、レコードが無い場合には
0を挟むようにしたいのですが、たとえば5個レコードがあると仮定して
3番目がNULLの場合には
3 4 0 52 1
でも実際には
3 4 52 1
と出力されてしまいます。
どうやったらレコードがNULLなのかどうか判断できるのでしょうか。
0114nobodyさん
04/01/15 22:17ID:???0115113
04/01/15 23:06ID:AedXtgQuなるほど。ありがとうございます。
3番目がNULLの場合ではなく、3番以降が全てNULLだとすると
3 4 0 0 0
と期待したいところ、4回目で既にレコードがないためにwhileの
ブロック内が実行されずに
3 4 0
となってしまいました。これを期待通りに出力するにはどうしたら
いいのでしょうか。
0116nobodyさん
04/01/15 23:58ID:???print join " ", map $_ + 0, @array[0..4];
以降 Perl の基本的な質問はこちらへ。
http://pc2.2ch.net/test/read.cgi/php/1072896288/
0117113
04/01/16 20:36ID:???push @array,$row[0]?$row[0]:0;
}
print join(" ",map $_ + 0,@array[0..4]);
としてみたのですが、レコードが無いと、whileブロック内が実行されないため
3 4 0 52 1
ではなく
3 4 52 1 0
になってしまいました。結局
$sth->fetchrow_arrayが必ずレコードを返すようにselect文を修正しました。
ありがとうございました。
0118nobodyさん
04/01/30 01:13ID:???曖昧な質問しても応えづらいとは思うのですが、
運用されてる方の「幸せになった話」や「なんでやねん話」を
お聞かせ願いたい。
0119nobodyさん
04/01/30 09:32ID:???0120nobodyさん
04/01/30 21:29ID:DOZLZjLQ0121nobodyさん
04/02/01 12:13ID:nycEgmtEname:text(文字型)
regist:date(日付型)
のとき
$sth = $dbh->prepare("INSERT INTO staff (name, regist) VALUES (?, ?)");
$name= "hoge";
$regist = NULL;
$sth->execute($name, $regist);
だと上手くいかないのです
0122nobodyさん
04/02/01 12:57ID:V0LjMB45個々のCGIがDBに接続するときのユーザやパスワードって皆さんどこに書き込んでいますか?
CGIにそれぞれ書き込んじゃってもいいのですが、分散するし危険な気もするので
人目にさらされない場所で一カ所で管理したいと思っています。
みなさんどうやってます?
0123nobodyさん
04/02/01 13:16ID:???つか多分それ strict 通んないだそ
>>1 にリンクされてる「DBI.pm 日本語訳」ページから 'NULL' を探せ
>>122
接続用のクラスを作ってそこに書き (/usr/local/lib/perl とかどっかその辺に)
DB 使う CGI は全部それを use してる
0124nobodyさん
04/02/01 15:55ID:nycEgmtE的確な指摘ありがとうございます
バッチリ上手くいきました
0125nobodyさん
04/02/05 15:37ID:yM4BLX2X$DB = "hogedb";
$User = "hogeuser";
$Passwd = "hogepass";
$dbh = DBI->connect("DBI:mysql:$DB:localhost", $User, $Passwd);
$login_id = $dbh->quote($login_id);
$sql = "select Cust_kanji from bb_k where login_id = " . $login_id ;
$sth->prepare($sql);
$sth->execute;
@get_data = $sth->fetchrow_array;
$Cust_kanji = $get_data[0];
$sth->finish;
$dbh->disconnect;
とやってるだけなのに、
Can't call method "prepare" on an undefined value at /u/web/bblabc/cgi-local/friends/intro_popuppreview.cgi line 56.
と怒られてしまいます。
原因として何が考えられるのでしょうか?
いろいろ調べたもののわかりませんでした。
それと不思議なのが、
同じサーバの別のスクリプトで、
DBIでMysqlにつなげて成功している場合があるということです。
どなたか教えていただければ幸いです。
0127125
04/02/05 17:27ID:???$sth->prepare($sql);
じゃなくて、
$sth = $dbh->prepare($sql);
の間違いでした。。。すみません。
まだ、DBI歴2日なもので。。。
ありがとうございます。
0128nobodyさん
04/02/07 02:17ID:7x+8FZeNコマンドラインで実行したサイの
「ex:6 rows in set (0.05 sec)」
〜secみたいなやつ
0129nobodyさん
04/02/07 18:29ID:???かなり昔に使っただけだし若干狙いが違うかもしれないが、DBI配布キットにプロファイラがある。
perldoc DBI::Profile
見てみれ
0131118
04/02/09 22:00ID:r2jpV3Tkこれって同じリモートDBマシン上の複数のDBへの接続を
キャッシュできないんですか?
マニュアルには「接続を定義するパラメータは接続属性も含めて
まったく同じでなければなりません」とあり、実際に
DBI:Proxy:hostname=192.168.0.1;port=1234;dsn=dbi:Pg:dbname=hoge1
DBI:Proxy:hostname=192.168.0.1;port=1234;dsn=dbi:Pg:dbname=hoge2
という二つの接続属性による接続を作成しても、二つ目はDBIが
panic: DBI active kids..... てな感じでエラーを吐くようなんですが。
すごくそんな訳無いやん、って気もするんですが、
そういうものなんでしょうか?
0132131=118
04/02/09 22:14ID:r2jpV3Tk問題なのはDBI::ProxyかDBDみたい。。。
0133Hippo2000
04/02/23 00:49ID:IskmOTa+テストする直接DBD::Pgを利用するように変えてみては?
DBD::Proxy-DBI::ProxyServerをApache::DBIで利用するのは、ちょっと酷な気がします。
(そっちのほうがボトルネックになるでしょう)
0134Hippo2000
04/02/23 01:01ID:IskmOTa+DBD::ODBCはUnixでも使えますけど?
MDBToolsのプロジェクトがODBCドライバを出したという話は聞いてますし、
先日、Timさんがこんなメール書いてましたけど反応なかったみたいです。
Accessing Access .mdb databases from unix (was: MS Access)
http://www.mail-archive.com/[email protected]/msg02755.html
MDBToolsのソースを解析しようと思ってたけどODBCドライバがあるなら
もういいかなと。
0135131
04/02/23 23:50ID:wtoD45ZJDBD::Proxyを使ってみようと思ったのはDBに接続するアプリケーションサーバが
増えたときに、コネクションの制御が(漠然と)しやすいかなと思ったのと、
接続の取得クラスをSingletonパターンで実装するとコネクションプーリングが
実現できるかもしれないかなと思ったためです。
# Apache::DBIをよく理解してなかったことも有りますが...
結局あまり詳しく追求しませんでしたが、動作が不安定なので
とりあえずは直接接続以外の方法は検討しない事にしました。
0136nobodyさん
04/03/06 11:22ID:7pY4exk3たとえばゲームのレビューを書くようなホームページを作ろうとして、
それをhtmlのページのフォームから必要な情報(ゲーム名、ゲーム会社とかレビュー内容とか)を書き込んで
それをサーバー側にデータとして蓄積していきます。
そして閲覧者が見る時に、そのゲーム名やゲーム会社名で検索できるようにするには
どのような技術を使えばよいのでしょうか。
ちなみにperlもいまいちですし、データベースの知識はミジンコくらいです><
環境は…パソコンはXPで、サーバーは有料のレンタルです。そこはperl、phpが使えるようです。
なにとぞm(__)m
0137nobodyさん
04/03/06 12:41ID:???0138nobodyさん
04/03/06 14:19ID:???■ このスレッドは過去ログ倉庫に格納されています