Perl::DBIat PHP
Perl::DBI - 暇つぶし2ch2:nobodyさん
02/03/12 23:43 .net
256倍本で DBI のが出たね。
まだ見てないけど。

ところで、Perl::DBI って書き方あるの?

3:nobodyさん
02/03/12 23:51 .net
DBI256倍は14日発売じゃなかったか?
Perl::DBIは今考えた。
Perl-DBIとかPerl/DBIじゃしっくりこないかと思って。

4:2
02/03/13 00:06 .net
256倍本、昨日見たよ。

5:nobodyさん
02/03/13 12:50 .net
>>4
どう?

6:nobodyさん
02/03/13 14:45 .net
はっとこ。
「Perlを256倍使うための本 DBI編」
URLリンク(www.ascii.co.jp)

7:2
02/03/13 15:19 .net
>>5
売っているのを見たってだけで、中を見たわけじゃない。
すまん。

8:5
02/03/13 21:48 .net
>>7,6
買ってみることにするよ

これもいちおうはとこう
「入門 Perl DBI」(Programming the Perl DBI)
URLリンク(www.oreilly.co.jp)


9:かおりん祭り ◆IidAAeuI
02/03/14 03:28 .net
 ∧∧
(^▽^) 新スレおめでとうございまーす♪          
ヾcUUっ


10:nobodyさん
02/03/14 21:49 CO7zG810.net
Perl 256 DBI編は「DBIを使うため」の本じゃなくて「DBDを作るため」の本ですね。
マニアな内容でイイです


11:。 まだ前半しか読んでないけど、英訳すれば英語圏でもちゃんと売れそうな内容っすね。さすが。 で、ジョーク(?)が日本固有なものじゃないのは、著者の川合さんがその辺を想定してるからかな。



12:nobodyさん
02/03/15 17:16 .net
ガーソ、本屋になかったよ。

13:5
02/03/17 01:36 .net
読みました。
EffectivPerlわかるくらいのひとなら
かなりおもしろいはず。
DBIて奥深いね。

14:11
02/03/17 15:50 .net
やっと入手。
流石に濃いね。
でも256本の特徴なのか
         <BIG>こんなの</BIG>
が沢山あるのが読みにくい…。


15:nobodyさん
02/03/18 22:10 IpsHW25p.net
あげ

16:nobodyさん
02/03/19 21:17 w47YlbXs.net
MySQLについて詳しい書籍はないでしょうか?
PostgreSQL本はよく見かけるんですが…

17:15
02/03/19 21:34 w47YlbXs.net
補足です、PerlでMySQLを使いたいのです。
PHPとの組み合わせがメインのものが多くて・・

18:nobodyさん
02/04/01 20:39 s5HvuRgH.net
>>15
"MySQL & mSQL"っしょ。
URLリンク(www.oreilly.co.jp)


19:15
02/04/01 22:36 .net
レスが・・・
>>17
ありがとうございます。
ネット上の資料を点々としていました。
早速明日本屋に寄ってきます。

20:nobodyさん
02/04/16 13:05 kcYOQBmc.net
DBDを書くのって馬鹿みたいにメンドクサイのだが、
この辺の構造に誰も文句いったことないんかね?

21:nobodyさん
02/04/16 13:18 .net
>>19
さぁ

22:nobodyさん
02/05/03 01:06 .net
>>19
まぁ、Tim神の怒りをかったら終わりだからなぁ。

23:nobodyさん
02/06/09 20:05 6X1lutDF.net
激しくワラタ
URLリンク(www.cuppy.co.jp)


24:nobodyさん
02/07/21 12:25 .net
本発見、MLの人だ。このシリーズ、最近紙質落としてなかたけ

25:nobodyさん
02/07/21 12:26 .net
URLリンク(www.ascii.co.jp)
貼り忘れ

26:nobodyさん
02/07/21 12:28 .net
URLリンク(www.amazon.co.jp)
ココにも、そういえばMySQL+Perlの組み合わせのサーバーってあまりないんだっけ

27:nobodyさん
02/07/22 19:32 .net
>>25
なぜそう思ったのか400字以内で説明せよ。

28:nobodyさん
02/09/25 23:18 .net
Cマガジンで Perl DBI の連載が始まる (始まった?)
らしいね。結城さんの連載と入れ替わりなのかな。
読んだヒトいる? 漏れはプローガ先生の記事が無い
Cマガは買う気がしないけど。

29:nobodyさん
02/10/13 16:49 .net
URLリンク(search.cpan.org)

30:nobodyさん
02/11/02 05:11 o+t0cR8M.net
なんか今日会社にきた取引先の人が、
MYSQL+Perl(DBI/DBD)で開発することについて
「そのようなやり方は聞いたことがありませんねぇ。
普通はMYSQL+PHPですよ。」
とか言ってたんだけどそんなにMYSQL+Perl(DBI/DBD)
ってマイナーなやり方なのかな?
それともそいつが勉強不足なだけ?



31:nobodyさん
02/11/02 06:25 .net
彼の「普通」がそうだっただけ。
ドメインによって色々な「普通」有るからなぁ。

大抵の奴が自分の属しているドメインの「普通」が
普通だと思ってるからたちが悪い。

32:29
02/11/03 23:56 Ma5qtI8B.net
つーかその人Web関係のSEらしいんだけど、
もうちょっと勉強しろと言いたい。

33:nobodyさん
02/11/04 00:17 .net
>>29
単に Perl を避けているだけでは? 漏れの周りには、
「Perl ってモジュールとか入れなきゃいけないか
ら面倒じゃないですか。PHP が簡単だから PHP に
しましょうよ」なんて言うヒトもいる。そんなレベ
ルの話じゃないのかな?

「普通」なんて言い方は、自分の常識を押し付けた
いときに使うよ。漏れの場合(w

34:nobodyさん
02/11/04 00:59 .net
確かにMySQL+PHPと比べた場合MySQL+Perl(DBI/DBD)のが面倒に思える

35:nobodyさん
02/11/08 17:14 4WbT0Alf.net
もっとDBI/DBDは知られてほしいなぁ。
PostgreSQLのシーラカンス本では、Ruby、JSP、PHPなどとの
連携は紹介されているのにPerlとの連携に関しては触れられてない。
なんでだよ!

36:nobodyさん
02/11/08 20:42 .net
>>34
筆者がPerlやらない人だから。


37:nobodyさん
02/11/18 00:41 +Oj37AkT.net
なんとなくMacOSX 10.2にperl+postgresqlの環境を作ろうと
思ったのですが、DBIとDBDのモジュールのインストールが
難しい。よく分からないエラーがでてしまいます。

成功してる人、教えて!!!

38: ◆hMJAPH9PWA
02/11/18 01:24 .net
エラーログを見てみないとなんとも。

39:nobodyさん
02/11/24 23:55 nYY6oDGd.net
>>36
DBI-Japanで聞けば河合さんが教えてくれると思うよ?
URLリンク(member.nifty.ne.jp)

40: ◆hMJAPH9PWA
02/11/25 00:18 .net
>>38
「よく分からないエラーが出てしまいます」じゃ誰だって教えられないよ。


41:nobodyさん
02/11/25 09:28 .net
>>39
いや、もちろんそうなんだけどね。
どのようなエラーが出るかちゃんと報告すれば
ちゃんと教えてくれるから。>>36

42:nobodyさん
02/12/14 17:32 R1uTGzYK.net
なぜWebプログラミング板でこのスレが上がってこないんだ?


43:nobodyさん
02/12/14 20:27 .net
どいつもこいつもCSVで充分ってこった。

44:nobodyさん
02/12/14 21:21 .net
DBD::CSV DBD::File
排他処理が不安で使ってない香具師

45:名無しさん@お腹いっぱい。
02/12/14 22:14 .net
WebProg ったって個人サイトの掲示板みたいなのも含まれるだろうしね。
ログ100件ぐらいだったらファイルで充分だったりする。

46:nobodyさん
02/12/15 01:44 .net
数千件 数万件でもやりようによってはCSVで十分な
パフォーマンス出せたりする。
DBI DBDはインストールできればあとはSQLの書き方なわけで
DBIは常用していても話題がないのよ。

47:nobodyさん
02/12/17 08:30 PsoYCNCf.net
>>45
最近、DBD::CSVがバージョンアップしてJOINもできるようになったYO!
とか色々あるだろ。なんか、PHPはDBとの連携ができるけどPerlは
できないとか変な偏見があるみたいだからちょっと悔しかったりする。

48:nobodyさん
02/12/17 23:28 .net
>>46
そんな偏見ははじめて聞いたが……。
悔しいことは悔しいね。

んで、DBD::CSVのロック機構はどうなってるの?

49:nobodyさん
02/12/19 20:40 .net
悔しい?
かわいそうな人達なのでやさしく教えてあげてください。

50:nobodyさん
02/12/27 03:32 s3+SF1Z2.net
>>32
Perlはプログラマによって非常に観やすくいい仕事するCGIと
非常に乱雑で適当に仕事するCGIに大きく分かれるよね。

PHPもエラーメッセージがブラウザで確認されてしまうのが厄介。
(というかカッコワルイ)

CPANモジュールも普通にXで使うのなら便利なんだけど・・
ウェブサイト用CGIとして使うと余計なモジュールが多すぎてヘタすりゃ
いらないモジュールまで取り込んでしまうプログラマもいるみたい。
(そういう人は影で笑っておけば・・・済まないか w)

51:nobodyさん
02/12/27 07:12 wZxYN2FO.net
DBD::Oracleって接続遅くない?

52:nobodyさん
02/12/27 19:09 .net
>>49
>PHPもエラーメッセージがブラウザで確認されてしまうのが厄介。
>(というかカッコワルイ)
貴殿はPHPを使ったことが無いとお見受けしました。

53:nobodyさん
02/12/29 13:20 .net
>>49
いらないモジュールuseしても問題ないだろ。

>CPANモジュールも普通にXで使うのなら便利なんだけど・・
xで使うねぇ・・・
貴殿はちょっとLinuxかじった房
だとお見受けしました。

54:nobodyさん
02/12/29 15:27 .net
>>52
> いらないモジュールuseしても問題ないだろ。
いやー、問題ないとは言えないでしょ。
メモリの無駄だし、標準関数をオーバーライドするモジュールもあるし。
インストールは、ディスクが無駄な以外問題ないと思うけど。

>>49 の「取り込む」の意味が不明なので話の前提がわからんが、
49がアレだというのには同意する。


55:nobodyさん
03/01/13 21:30 GwIzQASu.net
DBIをもっと知ってほしいage

56:山崎渉
03/01/15 13:32 .net
(^^)

57:山崎渉
03/03/13 17:41 .net
(^^)

58:nobodyさん
03/03/13 20:56 tDY9NfKc.net
勉強するには本を買うしかないのですか?

なんにも分かってない状態なので、
とりあえず“入門Perl DBI”を注文してあるのですが、
それが届くまでの間、どこかに分かりやすいサイトがないものかと。
いろいろ見て回ったものの、正直、ぜんぜん理解できませんでした・・・

ってことは、本を買っても理解できないってことになるのだろうか・・・

あと、入門書として“入門Perl DBI”は最適でしょうか?


59:nobodyさん
03/03/13 21:50 .net
インポート無しでuseすれば名前空間は汚れないし。。
自分の空間にしかインポートされないから、勝手に汚染されることはないじゃろ。

どうせモジュールなんてmod_perlがキャッシュしてくれるから、分かりやすいように書けばよろしい。

use hogehoge ();

60:nobodyさん
03/03/13 21:56 .net
あぁ文章がめちゃくちゃだった。。

もっとまともな説明は、
use モジュールの名前 (インポートする関数名のリスト);
2つ目のリストが省略されたら、モジュールのデフォルトのものがインポートされる。
もちろん、デフォルトが何もインポートしない、になっているかもしれない。

つまり、、、
use Module () と、require Moduleは、いつ読み込まれるか、っていう違い(コンパイル時、
実行時)はあるけれど、結果的には同じことがおきる。

61:nobodyさん
03/03/13 21:59 .net
つまり結果が同じならどうでも良いんだってことよ。

62:nobodyさん
03/03/14 00:56 .net
ふ~ん。ま、そんなもんか。

63:nobodyさん
03/03/14 02:37 .net
object の package って require しても使えるんだっけ?

64:eval "require hoge;";
03/03/14 13:06 YuEJwOb3.net
use → モジュールが読み込まれ、関数が自動的にインポートされる。返り値は?
require → モジュールが読み込まれるだけで、インポートはされない。成功すれば真の値をかえす。

という理解でいいかな。

65:nobodyさん
03/03/14 15:05 .net
マジレスすると
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 が入るだけ。

66:nobodyさん
03/03/14 22:37 .net
あぁ。そうかぁ。require時の初期化の時点で勝手に割り込むやつもいるのか。。

このあたりは、Perl教なら、リビングの法則でなんとか説明するところ�


67:ゥな。(?)



68:nobodyさん
03/03/19 10:36 .net
廃れてる・・・な。

69:nobodyさん
03/03/30 17:35 vpWCaSDo.net
DBD::Access誰か作ってくれないかなぁ。
てゆーか誰も作ってないってことは難しいのかなぁ。

70:nobodyさん
03/03/30 17:51 Uipu2S6m.net
ODBC 経由では無理だった?もしくは、ADOとか。

71:67
03/03/30 18:01 .net
>>68
いや、今はWindowsXP+ActivePerl+DBD::ODBCなんですけど、
例えばLinuxのレンタルサーバーのUserディレクトリとかで
手軽に使えたらいいなーって思ったんですけど。

72:nobodyさん
03/03/30 19:32 .net
SELECT文実行後にfinish しないとまずいですか?

73:nobodyさん
03/03/30 21:02 .net
>>70
気になるならやっとけ。

74:nobodyさん
03/03/30 21:14 .net
prepare_cachedを使うときはfinishしないと駄目。かも。

75:nobodyさん
03/04/07 00:02 btpU8pX3.net
Perlを256倍使うための本DBI編買ったよ。
てゆーかPerlの256本ってこれだけだよね?
Rubyはいっぱい出てるのに。

76:nobodyさん
03/04/15 23:44 Tnm/ZADI.net
DBD::CSVはPure PerlだからTelnet使えないレンタル鯖で
使えるかと思いきや、中でText::CSV_XS使っているという罠。

77:山崎渉
03/04/17 12:01 .net
(^^)

78:nobodyさん
03/04/20 00:04 CCxtB9hm.net
DBD::Template使ったことある香具師いる?
あれいいね。

79:山崎渉
03/04/20 00:29 .net
(^^)

80:動画直リン
03/04/20 00:40 dAQHn3gv.net
URLリンク(www.agemasukudasai.com)

81:山崎渉
03/04/20 05:57 .net
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

82:山崎渉
03/05/22 02:08 .net
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

83:山崎渉
03/05/28 17:17 .net
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎―◎                      山崎渉

84:nobodyさん
03/05/30 14:30 I8fiUs9e.net
どうしてもCSVファイルにDBI使いたくてDBD::CSVやDBD::Spriteを
試したんだけど、どうしてもベンチマークとると速度が遅い。
やっぱりSQL解析部分で時間食うみたいだった。
しょうがないのでSQL解析部分を自作して速度の問題を解決。
DBDは一から作るのめんどいのでDBD::Templateを使いました。
もうこれからは掲示板だろうがなんだろうがDBI使い倒してやる。


85:nobodyさん
03/05/31 06:20 rt7PEdog.net
>>82
速度改良されたpmファイルアップキボンヌ


86:nobodyさん
03/05/31 23:01 oQuJYHeZ.net
あなたが探してる話題あれはこれでしょ♪
URLリンク(endou.kir.jp)
URLリンク(s-rf9.free-city.net)

87:82
03/06/03 16:07 lz5wO9wK.net
DBD::Templateを使ったサンプルをUPしておきました。
SQL解析部分は見てもらえば分かりますが「ナンチャッテSQL解析」なので、
自分のプログラムに合わせて処理を付け足す必要があります。
速度とプログラムの汎用性という意味では自分的には実用的かと思います。

URLリンク(webcolle.minidns.net)


88:nobodyさん
03/06/06 11:28 .net
>>85
すばーらスィ!!!!!!
sql文の練習に使えます。ありがと。
こんど、オンラインでやってみます。
postgressql+pg.pmでやるのとどっちが速いかは、
やっぱデータ量によるんでしょうね。


89:82
03/06/06 16:33 q9w0p8v1.net
>>86
所詮データはCSVファイルなので本物のRDBMSとは比較になりません。

・CSVに対してSQLが使える。
・DBIを使うことでプログラムの汎用性がある。
・速度的にも掲示板のログ管理程度なら実用レベルである。
・PurePerlなのでレンタル鯖等でも使える。

メリットはこんなところでしょうか。
ちなみにテーブル定義とSQL解析はプログラムごとに
付属のdbisub.plをいじらなければなりませんので。


90:nobodyさん
03/06/06 22:17 .net
>>87
ところで、川合さんの「PerlでDBI」(256倍シリーズ)買ったけど、ちょちょっ
と見ると、DBDの分類で、「自作系 (1)sqlの解析にSQL::Statementを利用」
の中に、DBD-CSVってのがある(DBD-Fileを継承)けど、>>85のは、それの兄弟
のようなものかね。



91:82
03/06/08 01:44 .net
DBD-Templateは河合さん作です。
↓のURL見た方が早いかもしれませんが、中身は本の中で紹介されてた
SomeFmt.pmを少しいじっただけだと思います。

URLリンク(www.hippo2000.info)

なんか作者でもないのに勝手に宣伝してるみたいでなんか
悪いことしてる気がしてきた・・・

92:nobodyさん
03/06/10 07:48 .net
>>89
いえ。ぜんぜん気にせんといてくらさい。


93:山崎 渉
03/07/15 11:13 .net

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

94:nobodyさん
03/07/24 20:46 .net
あげとく

95:nobodyさん
03/07/24 21:41 .net
めんどくさくない?

96:山崎 渉
03/08/02 02:24 .net
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

97:ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:53 .net
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎―――◎                      山崎渉&ぼるじょあ

98:nobodyさん
03/10/30 20:20 MsIzuyZ0.net
誰かDBD::Access作ってよ。
DBD::ODBC使えって?UNIXでも使いたいんだよ。

99:nobodyさん
03/11/01 19:09 ryreETR0.net
DBIでトランザクション処理ってどのようにやるんですか?

100:nobodyさん
03/11/01 19:40 .net
終了。

101:nobodyさん
03/11/06 11:41 +rjyvfMX.net
勝手に終わらすな

102:nobodyさん
03/11/07 12:36 .net
AutoCommit をoff(0)にしたら
それ以降は、commit するまで1つのトランザクション

103:97
03/11/11 23:17 .net
>>100
遅レスですがありがとうございます。

104:nobodyさん
03/11/20 16:24 5vqTDfsp.net
DBモジュールの件で質問ですが、PostgreSQLのgetvalueって、
MySQLではどういった形になるのでしょうか。
只今移行中です。
MySQLの場合はfechrowはあるのですけどgetvalueが無いので
困ってます。

PostgreSQLでのDBアクセスはPgモジュール、MySQLでは
URLリンク(www.atmarkit.co.jp)
この方法をとりました。

どうか教えてください。

105:nobodyさん
03/11/20 16:44 .net
FreeBSD の compat/linux 環境で Oracle 9i の DBD::Oracle を
build できた経験のある人っていませんか?

106:nobodyさん
03/11/20 18:17 .net
>>102
なんかあちこちで見かけるなw
selectall-xxx とかじゃだめかねえ

107:nobodyさん
03/11/20 20:45 .net
>>104
selectrowにしました。
ありがとうございました。

108:nobodyさん
04/01/01 17:37 P0LnBj0e.net
$mydb = DBI->connect("dbi:Pg:dbname=$DB_name","$DB_user","$DB_pwd");
$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って関数使えば良いらしいけど、使い方が良くわかりません。
識者の方々殿。 よろしくお願いします。

109:nobodyさん
04/01/01 17:59 .net
>>106
URLリンク(www5a.biglobe.ne.jp)

- $word =~ tr/'/\\\'/;
+ $word =~ s/'/\\'/g;

110:106
04/01/01 18:13 P0LnBj0e.net
>>107
出来たー! 有難う。 昨日からずーーっとこれでハマッってたっす。
ところで - と + ってどういう意味?

111:106
04/01/01 18:29 P0LnBj0e.net
あ、わかった。 trは1文字づつそれぞれ評価されて置換されるってことね。
AFOでスマソ

112:nobodyさん
04/01/01 19:11 .net
>>108
> ところで - と + ってどういう意味?
unified diff

ところで確認せずに言うけど
$sth = $mydb->prepare("insert into $TABLE_name values (?)");
$sth->execute($word);
ってやったら勝手にエスケープされんかい?

113:nobodyさん
04/01/02 18:27 .net
>>106
「perl dbi プレースホルダ」でググれ


114:106
04/01/03 12:41 2IxFJ5oW.net
>>110
出来ました。勉強になりました。
ありがとうございます。

115:nobodyさん
04/01/15 19:42 AedXtgQu.net
while (@row = $sth->fetchrow_array) {
push @array,$row[0];
}
print join(" ",@array);

これでレコードは全て数値で返ってくるとして、レコードが無い場合には
0を挟むようにしたいのですが、たとえば5個レコードがあると仮定して
3番目がNULLの場合には

3 4 0 52 1

でも実際には

3 4 52 1

と出力されてしまいます。
どうやったらレコードがNULLなのかどうか判断できるのでしょうか。


116:nobodyさん
04/01/15 22:17 .net
push @array,$row[0] ? $row[0] : 0;

117:113
04/01/15 23:06 AedXtgQu.net
>>114
なるほど。ありがとうございます。

3番目がNULLの場合ではなく、3番以降が全てNULLだとすると

3 4 0 0 0

と期待したいところ、4回目で既にレコードがないためにwhileの
ブロック内が実行されずに

3 4 0

となってしまいました。これを期待通りに出力するにはどうしたら
いいのでしょうか。

118:nobodyさん
04/01/15 23:58 .net
>>115
print join " ", map $_ + 0, @array[0..4];

以降 Perl の基本的な質問はこちらへ。
スレリンク(php板)

119:113
04/01/16 20:36 .net
while (@row = $sth->fetchrow_array) {
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文を修正しました。
ありがとうございました。

120:nobodyさん
04/01/30 01:13 .net
Apache::DBI 環境下での DBI::Proxy ってどのくらいの枯れぐあいですか?

曖昧な質問しても応えづらいとは思うのですが、
運用されてる方の「幸せになった話」や「なんでやねん話」を
お聞かせ願いたい。


121:nobodyさん
04/01/30 09:32 .net
そもそも mod_perl 自体が枯れてないし。

122:nobodyさん
04/01/30 21:29 DOZLZjLQ.net
ageてみるー

123:nobodyさん
04/02/01 12:13 nycEgmtE.net
プレースホルダにNULL値をバインドさせたいときはどうやるのでしょうか?
name:text(文字型)
regist:date(日付型)
のとき
$sth = $dbh->prepare("INSERT INTO staff (name, regist) VALUES (?, ?)");
$name= "hoge";
$regist = NULL;
$sth->execute($name, $regist);
だと上手くいかないのです

124:nobodyさん
04/02/01 12:57 V0LjMB45.net
Apache::DBI入れてみました。
個々のCGIがDBに接続するときのユーザやパスワードって皆さんどこに書き込んでいますか?
CGIにそれぞれ書き込んじゃってもいいのですが、分散するし危険な気もするので
人目にさらされない場所で一カ所で管理したいと思っています。
みなさんどうやってます?

125:nobodyさん
04/02/01 13:16 .net
>>121
つか多分それ strict 通んないだそ
>>1 にリンクされてる「DBI.pm 日本語訳」ページから 'NULL' を探せ

>>122
接続用のクラスを作ってそこに書き (/usr/local/lib/perl とかどっかその辺に)
DB 使う CGI は全部それを use してる

126:nobodyさん
04/02/01 15:55 nycEgmtE.net
>>123
的確な指摘ありがとうございます
バッチリ上手くいきました


127:nobodyさん
04/02/05 15:37 yM4BLX2X.net
use DBI;

$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につなげて成功している場合があるということです。

どなたか教えていただければ幸いです。

128:nobodyさん
04/02/05 17:01 .net
>>125

$sth って何が入ってるの?


129:125
04/02/05 17:27 .net
>>126
$sth->prepare($sql);
じゃなくて、
$sth = $dbh->prepare($sql);
の間違いでした。。。すみません。
まだ、DBI歴2日なもので。。。
ありがとうございます。

130:nobodyさん
04/02/07 02:17 7x+8FZeN.net
DBIで掛かった時間て取得できないのでしょうか?
コマンドラインで実行したサイの
「ex:6 rows in set (0.05 sec)」
~secみたいなやつ


131:nobodyさん
04/02/07 18:29 .net
>>128
かなり昔に使っただけだし若干狙いが違うかもしれないが、DBI配布キットにプロファイラがある。
perldoc DBI::Profile
見てみれ

132:nobodyさん
04/02/07 20:40 .net
>>129
どうもうです。みてみます。

133:118
04/02/09 22:00 r2jpV3Tk.net
ちまちまApache::DBIを触ってみてるんですが、
これって同じリモート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..... てな感じでエラーを吐くようなんですが。

すごくそんな訳無いやん、って気もするんですが、
そういうものなんでしょうか?


134:131=118
04/02/09 22:14 r2jpV3Tk.net
あ、いや、違いますね。
問題なのはDBI::ProxyかDBDみたい。。。


135:Hippo2000
04/02/23 00:49 IskmOTa+.net
>>131
テストする直接DBD::Pgを利用するように変えてみては?
DBD::Proxy-DBI::ProxyServerをApache::DBIで利用するのは、ちょっと酷な気がします。
(そっちのほうがボトルネックになるでしょう)

136:Hippo2000
04/02/23 01:01 IskmOTa+.net
>>96
DBD::ODBCはUnixでも使えますけど?
MDBToolsのプロジェクトがODBCドライバを出したという話は聞いてますし、
先日、Timさんがこんなメール書いてましたけど反応なかったみたいです。

Accessing Access .mdb databases from unix (was: MS Access)
 URLリンク(www.mail-archive.com)

MDBToolsのソースを解析しようと思ってたけどODBCドライバがあるなら
もういいかなと。

137:131
04/02/23 23:50 wtoD45ZJ.net
>>133

DBD::Proxyを使ってみようと思ったのはDBに接続するアプリケーションサーバが
増えたときに、コネクションの制御が(漠然と)しやすいかなと思ったのと、
接続の取得クラスをSingletonパターンで実装するとコネクションプーリングが
実現できるかもしれないかなと思ったためです。
# Apache::DBIをよく理解してなかったことも有りますが...

結局あまり詳しく追求しませんでしたが、動作が不安定なので
とりあえずは直接接続以外の方法は検討しない事にしました。


138:nobodyさん
04/03/06 11:22 7pY4exk3.net
すません。質問っす。
たとえばゲームのレビューを書くようなホームページを作ろうとして、
それをhtmlのページのフォームから必要な情報(ゲーム名、ゲーム会社とかレビュー内容とか)を書き込んで
それをサーバー側にデータとして蓄積していきます。
そして閲覧者が見る時に、そのゲーム名やゲーム会社名で検索できるようにするには
どのような技術を使えばよいのでしょうか。
ちなみにperlもいまいちですし、データベースの知識はミジンコくらいです><
環境は…パソコンはXPで、サーバーは有料のレンタルです。そこはperl、phpが使えるようです。
なにとぞm(__)m

139:nobodyさん
04/03/06 12:41 .net
perlかphpを使えばいいじゃん。

140:nobodyさん
04/03/06 14:19 .net
パンが無いのならお菓子を食べればいいのに

141:nobodyさん
04/03/06 17:22 .net
なぜこのスレで聞こうと思ったのかそこに興味がある

142:nobodyさん
04/03/06 18:06 .net
データベースだろうと、勝手に脳内変換して、DBIスレに書き込んじゃったとか。

143:nobodyさん
04/03/06 23:21 .net
あ、ここ場違いだった??><
別で聞きます…すません。

144:nobodyさん
04/03/07 01:25 .net
別で聞いてもオマイの質問じゃ碌な答えはかえらねぇよ

145:nobodyさん
04/03/07 02:51 FpUwyDyc.net
DBIじゃなくて、Pgモジュール使ってるんですが、
Perlで扱うスレで誘導されてるんで、こっちで質問させてください。

Perlから、use PgでPostgre SQLにinsertするのを書いているんですが、
なぜか登録できません。(接続はできています。)

登録するカラムが26もあるのが原因なのかと悩んでいるんですが、
何か原因考えられませんか?

ちなみに、カラムを3,4個に減らすと登録できるんです。

使ってるデータ型は、text,smallint,bool,dateだけです。

146:nobodyさん
04/03/07 12:49 .net
登録できない場合にエラーが出てないかをまず確認すること

147:143
04/03/07 16:36 .net
if ($result->resultStatus !

148:143
04/03/07 16:41 5iK4kpNa.net
切れてしまったので、再度

if ($result->resultStatus != PGRES_COMMAND_OK) {

print "$result->resultStatus";

}

を実行したら7と表示されました。(=は半角)

これは、PGRES_NONFATAL_ERRORということでいいのでしょうか?

149:nobodyさん
04/03/07 18:28 .net
>>146
ということでよさげだが、PGRES_NONFATAL_ERROR だけでは何が起きてるのかわからんな…
たぶん詳細なメッセージが stderr なりエラーログなりに出てると思うのだが、確認できん?

なんとなくSQL文の長さ制限に引っかかってるんじゃないかという気がするのだが自信は無い

150:146
04/03/07 21:16 5iK4kpNa.net
早速のレスありがとうございます。

SQLのstderrはどうしたら見られるのでしょうか…?

トクトクプロフェッショナルでやってるので、telnetは使えるのですが、エラーログとかはルートじゃ無くてもOKなのでしょうか?

SQL文の流さ制限は8KB以下でいいですか?これだと8192文字には行ってないはずです。

モジュールに渡せる制限とかもあるのでしょうか?

色々書いてしまいましたが、御教授お願いします。

151:nobodyさん
04/03/07 21:22 .net
$conn->errorMessage

じゃなかった?

最近はDBI&DBD-Pgばかりだから忘れた

152:148
04/03/08 04:02 .net
なんか、深夜にやったら動きました。

自分でもなんでって感じなんですが、サーバーの負荷と関係あるんでしょうか?

ちなみに$conn->errorMessageは使えませんでした。

ともかくプログラム自体は合っているようなので、暫く様子見ることにします。ありがとうございました。

153:nobodyさん
04/03/08 06:53 .net
>トクトクプロフェッショナルでやってるので、
この辺が理由の気がする。

154:150
04/03/09 05:20 .net
tok2 proが原因ですか…?

確かについ最近まで設定ミスでRDB使えない設定になってましたし、ずさんなとこが多いのは事実のような。

でも、トラフィックはめちゃめちゃな訳では無いし、安めで色々使えるので気に入ってるのですが、他にオススメのトコありますか?

自鯖立て�


155:�は無しで…。



156:nobodyさん
04/03/10 10:25 .net
errstrは?

157:nobodyさん
04/03/15 22:17 5hxMa2mE.net
>>152
XREAとかな。
これ以上はレンタル鯖板に行って探すか、
自鯖板行って勉強するかだな。

158:131=135
04/03/16 01:14 4QG7B2dV.net
database connection pooling は dbi の世界ではある種宗教的な問題でも
あるようで、この辺↓とか読みつつなるほどと思ったり。
URLリンク(mathforum.org)

でも、プールしたいという想いを偽る事ができない方も多いかと思ったので参考まで。

ResourcePool by Markus Winand
URLリンク(search.cpan.org)
URLリンク(www.perldesignpatterns.com) (ref

Apache-Sybase-ConPool by Michael Peppler
URLリンク(search.cpan.org)

SQL-Relay
URLリンク(sqlrelay.sourceforge.net)


決してプロセス単位の接続永続化との比較ベンチをとる神光臨を待ってる訳じゃないですw


159:nobodyさん
04/03/31 23:28 .net
mod_auth_dbiのApache2用って無いのかな?

160:nobodyさん
04/05/02 03:28 .net
DBD::Pg使ってますが、executeのあとにfinishしないと
まずかったりしますか?
今書いてるソース、すべてつけていないもので、、、

161:nobodyさん
04/05/11 22:42 .net
某所でスレ違いと言われこちらに誘導されこちらにも書かせてもらいますが、

MySQLをPerlから操作しようとしました。
そしたらinstall_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC ...
とエラーがでました。
恐らくモジュールが入ってないのかと思いますが
どうすればインストールできるでしょうか。
一応、Msql-Mysql-modules-1.2219と言うのをDLしてきましたが
root権限など持っていないので説明にある方法ではインストールできません。
cgiとおなじフォルダにmysql.pmを置いてやれば動くような気もしますが
取り敢えず/mysql/libの中身をまるごと置いてやっただけでは動きませんでした。

162:nobodyさん
04/05/11 23:50 .net
DBI落としてきて、make install

163:nobodyさん
04/05/12 07:05 .net
>>159
root権限を持っていないのでその方法では出来ません。

164:nobodyさん
04/05/12 09:20 .net
自分のフォルダへインストールしませう

165:nobodyさん
04/05/12 09:20 .net
s/フォルダ/ディレクトリ/

166:nobodyさん
04/05/12 12:09 .net
perl Makefile.PL したあと、できた Makefile を手で書き換える

167:nobodyさん
04/05/12 12:56 .net
URLリンク(member.nifty.ne.jp)

168:nobodyさん
04/05/12 17:30 .net
DBI mysqlを利用しています。
名前「no」というカラムをauto_incrementで作成してinsertすると
「no」は自動的にインクリメントされていきますがinsertと同時に
今insertしたレコードの「no」を取得する方法はありますでしょうか?
現在は
1,insertする
2,一番最後のレコードの「no」取得する
という方法をしていますがもし1と2の間にinsertされると別の「no」を
取得してしまうことになります。1~2の間でロックを行えば解決しますが
1回のSQL発行でinsertと「no」の値を取得できるようなことは出来るのでしょうか?

169:nobodyさん
04/05/12 17:49 .net
すみません自己解決しました。
URLリンク(dev.mysql.com)

INSERT INTO GIRLS_DATA (no, name) VALUES(NULL, 'nobodyさん');
SELECT LAST_INSERT_ID();

170:158
04/05/12 20:10 .net
>>159-164
無事、使う事ができるようになりました。有難うございました。



ところで、インストールしたファイルにNullP.pmと言うファイルが有りましたが
ガッしておいたほうが良いですか?

171:nobodyさん
04/08/05 13:25 .net
日付の加減算などを行う関数はMySQLとPostgreSQLで異なるようですが
DBIを経由すれば問題なく動くのでしょうか?

172:nobodyさん
04/08/06 00:05 .net
DBI は、プログラマが用意したSQL文をDBMSに投げる部分を共通化しているだけなので、
DBMSの方言に合わせたSQL文を書くのはプログラマの責任

DBIx系だとSQL方言の違いまである程度吸収してくれるモジュールがあるが
日付関数のはさすがに無いかもしれないなあ

173:168
04/08/09 13:45 .net
>>169
AUTO_INCREMENTで自動付加された値を取り出す場合、
MySQLの場合「LAST_INSERT_ID()」を使いますが、PostgreSQLの場合は
「curval('targetname')」のように行うようです。
いまはプログラムでDBに合わせてsql文を変えています。(Win環境なのでPostgresSQLは使えません・・・)
このあたりも、DBIが吸収してくれますか?

174:nobodyさん
04/08/09 14:59 .net
SELECT文の実行結果CSV形式のファイルに保存したいのですが
コマンドは用意されていますか?
自分で作るのもそう手間ではないのですが・・・。

175:nobodyさん
04/08/19 13:37 .net
root権限の無い環境で、DBI/DBDを使いたいのですが、
他の環境でコンパイル済みのものをコピーして
パスを通してやれば問題なく動くのでしょうか?

176:nobodyさん
04/08/20 00:00 .net
(´-`).。oO(なぜ試さないのだろう・・・)

177:nobodyさん
04/09/23 13:51:31 8pWVerC9.net
age

178:nobodyさん
04/11/24 21:43:11 .net
webProgじゃあないけど、ここが一番perl DBIの話にふさわしそうなので。
DBI:ODBC バグってるっぽい、ってのは気のせいでつか・・・?!
ActivePerl5.8/MySQL4.1.7の組み合わせで使ってて判明
確信持てないのでわかる香具師教えてくらはいな。
my $dataSource = "DBI:ODBC:test";
$dbh=DBI->connect($dataSource, $userName, $pass) || die "connect die:$!";
$sth = $dbh->prepare($query);
$sth ->execute($param) || die $dbh->errstr;
while (@row = $sth->fetchrow_array){
foreach $temp(@row){
print $temp . "\t";
}
}
ってやった結果が変なのでデバッガで見てみたら、@rowの中身が壊れてた。
テーブルの中身はほかのODBCクライアントで確認、異常なし。
壊れてたのは$queryで指定している3番目のカラムで、DB上ではvarchar(20)。
壊れてたデータは、8桁の数字の後に文字列が付いているというもので、数字だけになってた。
foreach部をdumpだっけ、書き換えてDBD側のエラーが出てきたような記憶がある。
それともActivePerl ppmパッケージのみのバグなんでしょうか・・・?

179:nobodyさん
04/11/25 03:03:01 .net
mysql使うならdbimysql使えばいんでないの?

180:175
04/11/25 09:38:47 .net
>176
ああごめんなさい、それで動いてからのカキコです。
けど、同じODBC接続でもCSEはちゃんとデータとって来れてるし、あれっ?と思って。

181:175
04/11/29 23:58:45 SyWDmi2S.net
教えて君上げ

182:nobodyさん
04/12/13 09:37:18 LQJcn1sJ.net
DBD::CSVって最新版ではトランザクションは使えるんだっけ?

183:nobodyさん
04/12/14 18:00:43 gx135s3/.net
mysqlのバージョンが4.0.22なのですが
TIMEDIFF(expr,expr2)みたいなことをしたい場合どうしたらいいでしょうか。
そうしたい場合はperlで得るepoctimeの値を保存するべき?

184:nobodyさん
05/08/17 02:05:25 .net
質問したいのですが、テーブルの中の番号フィールドと名前フィールドをSELECTしてきて、
に番号フィールドのデータ全てを配列@aに格納、名前フィールドのデータを@bに格納するには
どう書いたらよいですか??

185:nobodyさん
05/08/17 02:11:32 5eFyQrDL.net
age

186:nobodyさん



187:2005/08/17(水) 03:32:05 ID:???.net



188:nobodyさん
05/08/17 04:51:15 E/ZVNZ3K.net
DBIで、posgreにつなぐ法

よろ

189:nobodyさん
05/08/17 04:52:55 .net
DBIで、myにつなぐ法


190:nobodyさん
05/08/17 07:12:49 .net
>>184
URLリンク(www.google.co.jp)


191:nobodyさん
05/08/20 13:04:16 .net
DBI::pg:

192:nobodyさん
05/12/02 09:27:57 D04WUjX+.net
DBD::SQLiteがアップデートされたのはいいが、またアトリビュート名がガイドラインにそってないよ。
>$dbh->{unicode} = 1; # fetchしたテキストフィールドのutf8flagがオン
命名のガイドラインに従うなら"sqlite_unicode"だろ。



193:nobodyさん
06/02/24 16:36:16 .net
DBI::connect でポスグレに繋いだときに、
わざとホスト名を間違えてエラーを出したのに、
undef が帰って来なくて die されてしまうんですがなぜでしょうか?

#!/usr/bin/perl
use strict;
use DBI;
my $dbh = DBI->connect( "dbi:Pg:host=aaaaa;port=5432;dbname=hoge", 'user', 'password' );
my $status = ( $dbh eq undef ) ? $DBI::errstr : 'ok';
print qq(content-type:text/html\n\n);
print $status;
exit;

この実行結果が 500 エラー。
connectできなかったら undef がくるのではないのか…

194:nobodyさん
06/02/24 17:03:13 j8E2zsnz.net
>>189
500エラーだけじゃ情報が少なすぎるので、http鯖の
エラーログを見るか、

use CGI::Carp qw(fatalsToBrowser);

を使うか、自前でconnectをevalの中で実行して$@を
表示してみるなどして、どういうエラーが出てるかを
きちんと調べることをお勧めする。


195:190
06/02/24 18:17:21 .net
connectでエラーが起きたときに undef が帰ってくることを利用して
エラー処理を行おうと思っているのですが、undef が帰ってこなくて悩んでいます。
ですので、エラーの内容は特に何でもいい感じです。

ちなみにエラーの内容は、ホスト名をわざと間違えて実行しているので、
エラーログにももちろん
DBI connect(...) failed: could not translate host name "aaaaa" to address: Name or service not known
が出ます。
(エラーの内容はユーザ名間違いでもなんでもいいです)

参考にしているサイトやオライリーのPerlDBI本では、
undefを見てエラーチェックする例が書かれていたので…





196:191
06/02/24 18:25:23 .net
すいません、190に追記です。

eval , $@ を使えば正しくエラー処理できてますが、
my $dbh = DBI::connect() or mySubRoutine();
のようなことがやりたい感じですが、エラー時でも or以降に行ってくれずdieされてる感じです。

197:191
06/02/24 18:26:49 .net
>>192 は、
×190に追記です。
○191に追記です。

間違いでした。
スレ汚しすいません…

198:nobodyさん
06/02/24 19:02:59 .net
>>189
option


199:191
06/02/24 19:28:07 .net
>>194

どういう意味でしょうか??
DBI::connect には option 属性がなかったので。

200:nobodyさん
06/02/24 20:46:26 .net
DBIC のスレきぼん。

201:nobodyさん
06/02/24 22:51:21 .net
少なくとも手元の環境ではconnect失敗でundefが戻ってきて処理は続くので、
環境やバージョンに依存した何かかね? PrintErrorを0にしないと、warningは
でるけど。あるいは書いてないけどどこかでRaiseErrorを有効にしてるとか?

% perl -e 'use DBI; $dbh = DBI->connect("dbi:Pg:host=aaa", "user", "pass",); print "死んでない\n"; print "dbh ", defined $dbh? "= $dbh": "is undef", "\n";'
DBI connect('host=aaa','user',...) failed: could not translate host name "aaa" to address: Name or service not known
at -e line 1
死んでない
dbh is undef

% perl -e 'use DBI; $dbh = DBI->connect("dbi:Pg:host=aaa", "user", "pass", {PrintError=>0}); print "死んでない\n"; print "dbh ", defined $dbh? "= $dbh": "is undef", "\n";'
死んでない
dbh is undef


202:nobodyさん
06/02/24 23:27:04 .net
mysql つかっとけ。

203:189
06/02/25 21:19:30 .net
>>197

ご指摘ありがとうございます!

RaiseErrorが有効になっていたので、
無効にしてみたらちゃんとキャッチできました…

なにかものすごい勘違いをしていたようです。

RaiseErrorを無効にしないとdieされるから
キャッチできないってオチですね。

大変失礼しました。

204:nobodyさん
06/03/31 09:14:29 3Vb6MUys.net
Class::DBIをつかってOracle9iにつないでいます。
ORA-01000が出るんですが、原因がわかりません。
常に出るわけではなく、なにをきっかけにしているのか
ずーっと悩んでいます。

Class::DBIを使った場合、カーソルが開く(もしくは閉じる)タイミングというのは
いつになるんでしょうか?

なにかヒントのようなものでもよいので
お願いします。

205:nobodyさん
06/04/12 16:46:12 Fg0UYczL.net
windowsでperlからdbi使ってpostgreSQLに接続しようとすると
perl command line iteratorが落ちてしまいます。
そしてMicrosoftへ連絡させられる・・・。
どのあたりに原因がありそうですか?
postgreにアクセスしないperlプログラムはちゃんと動くし、
pgAdminからならちゃんとpostgreSQLは機能します。
CPAN使ってDBIとDBD-Pgをインストールしました。

windowsでこの環境構築できた人居ますか?

206:201
06/04/12 17:35:44 Fg0UYczL.net
×Iterator
○Interpreter


207:nobodyさん
06/04/16 14:21:00 .net
>>201

普通に
WindowsXP Pro + ActivePerl 5.6.1 + DBI 1.49 + DBD::Pg 1.21 + PostgreSQL 8.1.3
で動いてますが何か?

ちなみにDBD::Pgはppmで貰ってきたやつ。

208:nobodyさん
06/04/16 15:54:09 .net
俺は
Windows2000 + perl 5.8.7 built for cygwin + DBI 1.50 + DBD::Pg 1.43 + PostgreSQL 8.0.7
だな。

209:nobodyさん
06/04/17 00:27:48 .net
DBI 1.50にしようと思ったら

Perl versions below 5.6.1 are no longer supported by the DBI.
Perl versions 5.6.x may fail during installation with a complaint
about the use of =head3 in the pod documentation.

と言われてしまった。
そろそろ5.6は捨て時かな。
(他のモジュールでも「5.8以降じゃないからダメ」とインストールさせてもらえないのも結構増えてきた)

210:nobodyさん
06/04/20 16:26:10 .net
DBIx::Classの話はここでいい?

ある行をselect ... for updateで行ロックかけつつ更新したいんだけどDBICで
for updateしつつデータを取得する方法がわからなくて困ってます。

どうすりゃいいの?



211:206
06/04/26 09:50:57 .net
自己解決しました。

$rs->search_literal('id = ?) FOR UPDATE; --', $id);

search_literalは与えた文字列のまわりを括弧でくるんでくれるので、
FOR UPDATEの部分を外に出すために途中で括弧を閉じ、そのままだと
お尻の括弧が余るのでコメントにして無視させるというかなり強引な
トリックです。


212:nobodyさん
06/04/27 20:49:50 .net
DBIの話題でいいのかなぁ?

データベースはSQLite。
よくある検索画面。1000件中の11~20件目が2ページに表示されている。

というようなとき、limitやoffsetで取得行数を減らしてパフォーマンスを
あげることはよく行われていると思う。
だが検索にマッチした行が全部で何件かを知る必要がある。

limitをつけると、制限した行数しか返ってこないから
こういうときSQLを2回発行するしかないんかな?

order by してlimitしたりするとき、内部では何行あるか知っていると思うから、
SQL文にlimitつけてても制限されてない行数をしる方法がないかなぁと期待しているんだけど。

213:nobodyさん
06/04/27 21:28:39 .net
>>208
DBIだからこうというよりはSQL一般の話なのでデータベース板の
それっぽい質問スレでで聞いたほうが知ってる人に当たる確率が
高いと思われる。


214:nobodyさん
06/04/27 22:25:15 .net
うむ。ここは初心者板だし。

215:nobodyさん
06/04/28 07:36:40 .net
>order by してlimitしたりするとき、内部では何行あるか知っていると思うから、
DBの実装によると思う。
逆に言えば、DBごとに行数を返したり返さなかったりすると思うから、その共通I/FであるDBIでは取得できないと思う。
素直にselect count(*)しなされ。

216:nobodyさん
06/04/28 07:52:56 .net
実装によっては場合によっても違いそうだしな。
ちょうど都合のいいインデックスがあれば
頭からlimit数分順に拾うだけでいいかもしれない
わけだし。


217:nobodyさん
06/04/28 15:07:40 .net
うむ。ここは初心者板だし。


218:nobodyさん
06/05/02 20:43:42 Hk7IzHit.net
時代はDBIx::Class!って事で
DBIxでLimit 4,10みたいなのできないんかねー

219:nobodyさん
06/05/03 00:22:54 .net
>>214
pagerのことかな。直接limitしたいんだよというときにはかえってめんどくさいが。
あるいはsearch_literalで >>207 とおなじやりかたでlimitもつけられそう。
(試してはいない)


220:nobodyさん
06/05/03 05:32:14 .net
DBIx::Class 系で、set_sql する方法きぼん。
compat とかわけわからなす。

221:nobodyさん
06/05/08 20:54:21 .net
スレ違いだったらすみません。DB板から移動してきました。
Perl + Postgresqlのアプリをmysqlに移植しようとしています。
Postgresqlでは複数ステートメントを連結したSQLをDBIで渡して実行できてたのですが、
mysqlでそのまま渡すとSyntax Errorとなってしまいます。
cseというクライアントソフト経由でも同様の症状がありましたが「一括実行」という
Pstgresqlでは使ったことのない操作で複数ステートメントを順に実行できました。
Perlで実行するためには何か特殊な設定などが必要でしょうか。
宜しくお願いします。

222:nobodyさん
06/05/10 08:03:47 .net
>>217
移植してやるから、ソースうp汁。

223:nobodyさん
06/05/11 17:46:04 .net
DBに登録した画像バイナリを読み出して、Content-typeとContent-length指定で
ブラウザに表示させることはできたんですが…
これ、普通のhtmlと一緒に出す場合はどうするのでしょうか?

224:nobodyさん
06/05/11 18:06:33 .net
>>219
httpがわかっていれば出来ない質問だな

225:nobodyさん
06/05/11 18:44:21 .net
>220
mhtファイルを自前で生成するとか?(笑)

226:nobodyさん
06/05/12 02:10:33 .net
辿る道のりは人それぞれなのね。俺なんてバイナリ型なんて扱ったことないし。
バイナリ出力するスクリプトの横に別のHTMLを作って、<img src="./hoge.cgi">
なんて書いてみよう。

227:nobodyさん
06/05/16 12:53:34 v8uyEVX5.net
DBI+MySQLでLIMITにプレースホルダが使えねぇぇぇ。

$dbh = DBI->connect( $dsn, $user, $password );
$sth = $dbh->prepare( 'SELECT * FROM companion LIMIT 0, 3' );
$sth->execute() ;

はOKだけど、

$i = 0;
$sth = $dbh->prepare( 'SELECT * FROM companion LIMIT ?, 3' );
$sth->execute( $i ) ;

とか、

$i = 0;
$sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' );
$sth->execute() ;

だと×。なして?

228:nobodyさん
06/05/16 13:54:23 .net
- Class::DBI
- Class::DBI::Sweet
- DBIx::Class::Schema

お好きなのをどうぞ。

229:nobodyさん
06/05/16 14:21:49 .net
>>223
> $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' );

$sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" );

じゃないか?「'」 だと$iが展開されないぞ。

230:nobodyさん
06/05/16 22:54:16 .net
> $sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" );

そんな書き方してると、注入されますよ?

231:nobodyさん
06/05/16 23:51:19 .net
いつからか忘れたけどDBD::mysqlがlimitの引数にplaceholder使えなくなったとおもう。

232:nobodyさん
06/05/17 03:02:32 .net
プレースホルダで渡すときにクォートされるからこんなSQLになってる
LIMIT '0',3
ってかエラー吐いてるの見ればわかるでしょ?

233:nobodyさん
06/05/17 08:51:13 .net
>>226
ギャグで言ってる?$iの汚染チェックするのは当然だろ。
オレは223の解釈が違ってるからレスしただけだ。
そもそも223の最後の例はプレースホルダ使ってないし。

234:228
06/05/17 10:09:25 .net
俺なんか間違ってた?

235:nobodyさん
06/05/18 00:52:43 .net
俺、PostgreSQL使ってるからシラネ。

236:nobodyさん
06/05/31 18:35:21 QUWCbat7.net
sjisをsjisのまんまMySQLに渡したいんですが、2バイト目が0x5cのマルチバイト文字
([\x81\x83\x84\x89-\x9F\xE0-\xEA][\x5C])で不具合がおこります。

十十十十 → 十十\十十\
十と一を足すと十一 → 十と一を足すと十\一

と2文字毎に\マーク(0X5C)が入ってしまいます。
これはDBI内部でのエスケープ時のバグでしょうか?

携帯電話用なのでなるべくSjisを使いたいという前提で、解決法がありましたら教えてください。


237:nobodyさん
06/05/31 19:02:06 .net
>>232
内部処理はUTF-8かEUCでやって出入り口のみでSJISと変換する。
これが一番楽だと思う。内部処理をSJISでやるのはお勧めしない。
どうしてもやりたければ同じような変な現象があとからあとから出て
来るので、それととことん付き合う覚悟でどぞー。



238:nobodyさん
06/05/31 19:21:37 QUWCbat7.net
>>233
お返事ありがとうございます。
携帯電話ユーザーなので、当たり前に機種依存文字を使ってきます。
丸囲み数字や、絵文字など。
他文字コードに変換すると極めて都合が悪いのです。。

文字コード変換前にそれぞれ絵文字や機種依存文字をマッピングしてやればいいのかもしれませんが、
その労力も大変なものなので、どうしたものかと

239:nobodyさん
06/05/31 20:20:51 .net ?#
>>233
こういうの使うのも面倒なの?
URLリンク(search.cpan.org)

240:nobodyさん
06/05/31 20:21:38 .net ?#
ありゃアンカ間違えた
>>235>>234へのレスね

241:nobodyさん
06/06/01 01:15:33 qUyEV8lX.net
>>236
auに対応してないですね。
絵文字のマッピングは途中までやってるので続きやってみようかな。
それと、機種依存文字か。

他にsjisからutf8に変換するときに注意するような文字ってありますかね?
Sjisに戻すという事を前提に。

\マークが全角バックスラッシュになるのは確認してるんですが。

242:nobodyさん
06/06/01 01:27:47 .net
Encode-JP-Mobile ってーのは何だか使えそうだが、どうだろう?



243:237
06/06/02 08:48:32 o6QECWed.net
Encode::from_to( $string, "CP932","UTF8",Encode::FB_XMLCREF);
でIBM外字全部処理してくれるんですね。
こりゃ便利だ。。Encode使ってなかったよ(-o-;


244:nobodyさん
06/06/02 10:33:02 .net
すでにスレ違いだけどEncode-2.13以降なら「FB_」はいらないらしいよ


> Encode 2.13以降ではfrom_toのfromの段階、すなわちdecodeの際にはcheckせずとにかくutf8化し、
> toの段階にあたるencodeの際にcheckを適用するという風にしたのですが、
> その結果、FB_(PERLQQ|HTMLCREF|XMLCREF)のFBが不要になったのです。
URLリンク(blog.livedoor.jp)
URLリンク(kawa.at.webry.info)

245:nobodyさん
06/06/12 11:30:33 SMnZjb/v.net
Perlを触り始めたばかりなので、何がなんだかわかっていません。
DIBを使用したいのですが、以下のエラーが出てしまいます。

【ソース】
1 #!/usr/perl5/bin/perl
2 ##
3 ##
4 require "/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/Bundle/DBI.pm";
5
6 @ary = DBI->available_drivers;
7 foreach (@ary){
8 print $_,"\n";
9 }

【エラー】
$ /usr/bin/perl test01.cgi
Can't locate object method "available_drivers" via package "DBI"
(perhaps you forgot to load "DBI"?) at test01.cgi line 6.

【環境】
Solaris9 + Oracle10g(10.1.0.3.0)

ご存知の方、ご指導よろしくお願いします。

246:nobodyさん
06/06/12 19:51:03 .net
>>241

つーかなんでuseじゃなくてrequireで読んでるのよ。
(ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって)

#!/usr/perl5/bin/perl

use DBI;

foreach (DBI->available_drivers('TRUE')){
print "$_\n";
}


247:241
06/06/13 01:15:22 5fyA1E2s.net
>>242
レスありがとうございます。

>つーかなんでuseじゃなくてrequireで読んでるのよ。
Oracle10gのインストール時にインストールされた DBI.pm を使いたかったからです。
(以下の3箇所に DBI.pm が存在していました。)
A. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/Apache/DBI.pm
B. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/Bundle/DBI.pm
C. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/DBI.pm

>ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって
インストールというのは、どういうものなんでしょうか?

★インストール方法1
@INCに定義されているディレクトリの1つに、上記 B のディレクトリの内容を
全部コピーして実行。結果は、
Can't locate object method "available_drivers" via package "DBI"
(perhaps you forgot to load "DBI"?) at test01.cgi line 5.
でした。

※@INCにパスを追加する方法は、わかっておりません。

248:241
06/06/13 01:16:03 5fyA1E2s.net
続き

★インストール方法2
CPAN
URLリンク(search.cpan.org)
から DBI-1.51.tar.gz をダウンロード。
gnuの make と gcc をダウンロード&インストール。
URLリンク(www.sunfreeware.com)から libiconv-1.8 をダウンロード&インストール。
makeで失敗。
  make: *** [blib/arch/auto/DBI/DBI.so] Error 1
行き詰まりです。

「DBIインストール」は、こんなに複雑なものなのでしょうか?

やはり、Solaris9(Intel-32bit) + Oracle10g(10.1.0.3.0)の環境が災いしているとか・・・

249:nobodyさん
06/06/13 04:58:57 .net
>>244
仕事でそんなレベルのことで悩んでるのなら、とっとと辞めればいいのに。

250:nobodyさん
06/06/13 08:05:43 .net
>>244 DBI の問題ではなく、読み込んだモジュールを import していない
せいです。use は自動で import しますが、require はしません。

@INC を直接いじるのは最後の手段なので、lib pragma を使い、次の行を
を use DBI の前のどこかに入れてください。

use lib '/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/';

perl は、付属ドキュメントが充実しています。2ch などで質問する前に
perldoc を使うようにしてください。


251:241
06/06/13 13:38:38 5fyA1E2s.net
>>246
有難う御座います。
実行してみました。
上手くいっていません。
まだ、設定がいるのでしょうか?


【ソース】
#!/usr/perl5/bin/perl

use lib '/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/';
use DBI;

#foreach (DBI->available_drivers('TRUE')){
#print "$_\n";
#}

【結果】
$ perl test01.cgi
ld.so.1: perl: 重大なエラー: 再配置エラー: ファイル
/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris//auto/DBI/DBI.so:
シンボル perl_get_sv: 参照シンボルが見つかりません。
強制終了


>perl は、付属ドキュメントが充実しています。2ch などで質問する前に
>perldoc を使うようにしてください。
了解しました。手引き有難う御座います。

252:nobodyさん
06/06/13 23:19:05 .net
>>246

> 重大なエラー: 再配置エラー: ファイル

そのDBIじゃなくて素直に
URLリンク(search.cpan.org)
のDBI使おうよ。
恐らく
/u01/app/oracle/OraHome_1/以下略
にある方はインストールまたはコンパイルに失敗しているんじゃない?
それと同名のモジュールで
URLリンク(search.cpan.org)
とは別物という可能性もあるでしょ。

インストール方法はREADME読め。
つーか読まなくとも
perl Makefile.PL
make
make test
make install
とする手順はほぼ全てのモジュールで変わらないっての。

ちなみにPerl 5.6.xだと警告(「5.6系列なんてもうサポートしてねーよ」)と出るからできればPerl 5.8.xにすることが望まれる。
5.6のまま使い続けたいのなら、警告無視してそのままインストールを強行するか、古いバージョンのDBIを落としてインストールすればいい。

> 了解しました。手引き有難う御座います。

了解したのに質問してるしw


253:248
06/06/13 23:20:07 .net
ごめん。
間違えた。

>>246
>>247

254:241
06/06/14 10:29:26 EZ+xyelB.net
>>248
README読みました。
URLリンク(search.cpan.org)の結果】
※perlのバージョンは v5.6.1 built for i86pc-solaris-64int
$ make
/bin/sh -c true
/bin/sh -c true
/bin/sh -c true
cc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xdepend -DVERSION=\"1.39\" -DXS_VERSION=\"
1.39\" -KPIC -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int/CORE -DDBI_NO_THREADS Perl.c
cc: unrecognized option `-KPIC'
cc: language depend not recognized
cc: Perl.c: linker input file unused because linking not done
/usr/bin/perl -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int -I/usr/perl5/5.6.1/lib /usr/perl5/5.6.1/lib
/ExtUtils/xsubpp -typemap /usr/perl5/5.6.1/lib/ExtUtils/typemap -typemap typemap DBI.xs > DBI.xsc &
& mv DBI.xsc DBI.c
cc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xdepend -DVERSION=\"1.39\" -DXS_VERSION=\"
1.39\" -KPIC -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int/CORE -DDBI_NO_THREADS DBI.c
cc: unrecognized option `-KPIC'
cc: language depend not recognized
cc: DBI.c: linker input file unused because linking not done
rm -f blib/arch/auto/DBI/DBI.so
LD_RUN_PATH="" cc -G DBI.o -o blib/arch/auto/DBI/DBI.so
cc: DBI.o: No such file or directory
cc: no input files
make: *** [blib/arch/auto/DBI/DBI.so] Error 1
$

255:241
06/06/14 10:34:10 EZ+xyelB.net
$ gcc -v
Reading specs from /usr/local/lib/gcc/i386-pc-solaris2.9/3.4.2/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
gcc version 3.4.2

DBI-1.39 27 Nov 2003

perl敷居高い。
(゚∀゚)アヒャ!

256:nobodyさん
06/06/14 11:02:47 .net
その程度もなんとかできない程度のスキルならインテル版Solaris使うのは
ちと荷が重いんじゃないかな... 仕事ならご愁傷様。


257:241
06/06/15 00:52:23 yyTHjJya.net
Solaris10のフルインストールでインストールされるgccとmakeを使っても結果は同じでした。
Solaris + Intel + 32bitの場合のOracleの選択肢は、Solaris9 + Oracle10gの
組み合わせしかないし、Solaris10のZFSを使いたいと思っているので、
素直にphp + MySQLを使う方がストレートのような気がしてきました。

258:nobodyさん
06/06/15 12:00:42 .net
こんな仕事されてたら正直きついな

259:nobodyさん
06/06/15 12:54:23 .net
ちゃんとした技術のあるところへ再委託したほうがいいよ。
で、出来た時間でじっくりお勉強。

260:nobodyさん
06/06/15 17:16:06 .net
まあまあ、よくハマル話なんで、愚颶ると結構出てくることだから。
ただ、エラーメッセージちゃんと読まずに問題を切り分けられないからって、
DBI に文句言うのはメ。

ヒント: gcc の -fPIC に当るのが SUN謹製 cc の -KPIC。Perl は寂しがり屋
だから自分とおそろいのコンパイラが好き。

261:nobodyさん
06/06/17 11:45:06 .net
>>254
単価が安いから仕方ないよw

262:241
06/06/17 12:52:26 1OdBlA+4.net
皆様ありがとうございました。
申し訳ないのですが php + MySQL で問題無く構築できました。

263:nobodyさん
06/06/17 13:25:04 .net
釣りか

264:nobodyさん
06/06/17 19:28:34 .net
このスレ親切だな・・・

265:nobodyさん
06/07/15 01:20:13 .net
ッッッッッッッッッッッッッッッッッッッッ~~~!!!
ば・・・ばかな!
DBD-Pgをインスコできねぇ・・・ググっても該当するものがでてこねぇ マジやべぇか(ry

DBD-Pg-1.49のmakeで下記の警告が出ます。
ご教授おねがいします。
-----------------------------
dbdimp.c: In function 'dbd_bind_ph':
dbdimp.c:1656: 警告: value computed is not used
quote.c: In function 'quote_string':
quote.c:44: 警告: value computed is not used
quote.c: In function 'quote_geom':
quote.c:79: 警告: value computed is not used
quote.c: In function 'quote_path':
quote.c:108: 警告: value computed is not used
quote.c: In function 'quote_circle':
quote.c:137: 警告: value computed is not used
quote.c: In function 'quote_bytea':
quote.c:174: 警告: value computed is not used
quote.c: In function 'dequote_bytea':
quote.c:329: 警告: value computed is not used
----------------------------------------

PostgoreSQL 8.1.4をインスコして起動済みです。
DBI-1.51をインスコ

↓工程
su - postgres
export POSTGRES_INCLUDE=/usr/local/pgsql/include
export POSTGRES_LIB=/usr/local/pgsql/lib
perl Makefile.PL
make

266:nobodyさん
06/07/15 20:03:51 .net
>261
警告だけなら問題はないはずだが。

267:nobodyさん
06/07/16 03:41:39 .net
>>262
レスアザース
一通りmake installをして下記トレース(****はふせたいヶ所)を実行してみました。
----------------------------------------------
#!/usr/bin/perl
use DBI;
use constant DBNAME => 'DBI:Pg:dbname=****';
use constant DBUSER => 'postgres';
use constant DBPASS => '****';
DBI->trace( 2, '/home/postgres/public_html/dbi_trace.log');
DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 });
print "Content-Type: text/plain\n\n";
print $DBI::errstr? $_: 'Done';
----------------------------------------------

結果(dbi_trace.log)
--------------------------------------------------
DBI 1.51-ithread default trace level set to 0x0/2 (pid 5346)
-> DBI->connect(DBI:Pg:dbname=tottoDB, postgres, ****, HASH(0x8eabc28))
-> DBI->install_driver(Pg) for linux perl=5.008008 pid=5346 ruid=0 euid=0
-- DBI::END
--------------------------------------------------

DBD::PgのVersionなど詳細をはきだす前にENDされています。

268:263
06/07/16 03:45:23 .net
ふせたいヶ所が結果でバッチリ見えてるとか
オレっておちゃめw

269:263
06/07/16 17:19:42 .net
ぐっすり睡眠をとってからmake uninstallで指定されているファイルをrm -fして
再インスコしたらDBD::Pgが動作しました。

/usr/local/pgsql/lib/libpq.so.4 のシンボリックリンクを
/usr/lib/libpq.so.4 に作った事が吉とでたようです。

ちなみに>262の言う通り警告は問題なかったようです。

270:nobodyさん
06/07/28 18:07:16 qH9kRSG5.net
環境は、mod-perl+MySQL+qmail+vpopmailで、vpopmailのユーザー管理はMySQLにしています。

perlでメールアカウントを作成するにはどうしたらよいでしょうか?

やりたい事は、セカンドメールサービスのようなもので、
登録したユーザー同士でセカンドメールを与えるという物です。

user_a@hotmail.comにid_a@mydomain.com
user_b@hogehoge.comにid_b@mydomain.comを与え、

user_a@hotmail.comからid_b@mydomain.comに送られたメールを
id_a@mydomain.comからuser_b@hogehoge.comに転送するような感じです。


現在はSubjectに送りたい方のidを入力してもらって、recept@mydomain.comを窓口にして転送してます。
もっと簡易なシステムを作りたくご相談します。

こういう場合、メールアカウントを作る必要もないのでしょうか?

271:nobodyさん
06/07/28 20:17:11 .net
>266
それDBIの問題じゃないだろ。

272:nobodyさん
06/08/28 17:49:49 .net
スマソ。DBICについての質問をココでさせて貰っても良いだろうか
CatalystでWebアプリを作っていて、思いっきりモデルで躓いている

CREATE TABLE TblDiary(
parano int4
order_no int4
belong_dno int4
have_illustno int4
PRIMARY KEY(parano));

CREATE TABLE TblIllust(
illustno int4
illust_name text,
PRIMARY KEY(illustno));

上記の「TblDiary」と「TblIllust」という2つのテーブルがあって、
TblDiary.have_illustnoとTblIllust.illustnoをJOINTさせたい
このとき

my $table = $c->model('DBIC::TblDiary');
$table->has_one('illust_bind' => 'Test::Model::DBIC::TblIllust', 'illustno');
my $records = $table->search(
{belong_dno => $dno},
{order_by => 'order_no'},
{prefetch => ['illust_bind']}
);

と書いているんだが、これだとTblDiary.paranoとTblIllust.illustnoがJOINTしてしまうんだ・・・
(一応、それ以外のところは思っているとおりにデータが取れている)
これを、本来望んでいるTblDiary.have_illustnoとTblIllust.illustnoの
JOINTにするにはどうすれば良いのか、誰か教授して貰えないだろうか

273:nobodyさん
06/08/28 17:53:16 .net
あ~、うまくインデントできなかった・・・

見辛い文体で申し訳ないorz

274:nobodyさん
06/08/28 20:45:48 .net
周り見ていると、質問者はみんな丁寧語だ・・・
こちらもスマンかった

とりあえず、DBICについてはスレ違いかもしれないので
初心者板でも行ってきます

【初心者】 λ......

275:nobodyさん
06/08/28 22:10:57 .net
URLリンク(nekokak.jf.land.to)

ぐぐればいくらでもでてくるのに。

276:nobodyさん
06/08/28 23:09:48 .net
>>271
レスありがとうございます。
えっと、申し訳ないですが、そこはすでに拝見させて貰いました・・・
(かなり詳しく書かれており、非常に重宝させて頂いています)

リレーションですが、モデルのファイルに設定を書き込まずに
Catalystのコントローラーにて書きたい点と、
TblDiaryが主キーのカラムじゃない点で頭を悩ませています

説明不足で申し訳ありませんでした。
かなりググったのですが、探し方が足りないのか
未だにネットでは見�


277:ツからずにいますorz 実際にCatalystを使っておられて、CDBIを使用されている方は おられるでしょうか?



278:268
06/08/28 23:18:44 .net
う~ん、すみません
説明がヘタで申し訳ないです・・・

主キーではないTblDiary.have_illustnoと連結させたいので、
このhave_illustnoというカラムを何らかの方法で
illustnoというカラムとリレーション指定を行いたいです
(このままでは、主キーのカラムであるTblDiary.paranoと連結してしまいますので)

希望するhave_illustnoへと連結できるよう、どのようにコントローラーに
指示を送れば良いのかが分からないです。

279:nobodyさん
06/08/28 23:21:10 .net
>>272

CDBIを使用されて(×)
DBICを使用されて(○)

・・・間違えました

280:nobodyさん
06/08/29 00:25:18 .net
リレーションの設定はモデルでやれってば。
コントローラでやる理由は?


281:nobodyさん
06/08/29 01:34:48 .net
>>275
レスありがとうございます。

コントローラに記述する理由ですが、今後テーブルの個数が大きく増減する可能性があり、
モデルを全削除して、再度CatalystのヘルパースクリプトでDBの構造から
モデルファイルを自動作成するかもしれないからです。
ヘルパースクリプトを使わず、変更の度に対応するCatalystのモデルファイルを
手動で追加・削除したりしても良いのですが、どうしてもミスがありますので・・・

こちらは希望ですので、モデルに書くしか実現できないようでしたら諦めたいと思います。
ただ、モデルに書いた場合でも片方のテーブルが主キー以外のカラムと連結できず、
ハマり状態から抜けられずにいます。

モデルにリレーションを書く方法も平行して試行錯誤してみます。

282:nobodyさん
06/08/29 02:11:16 .net ?BRZ(1020)
あっちにも書いたし、もしかしたら引用ミスかもしれないけど
こうじゃなくて

my $records = $table->search(
{belong_dno => $dno},
{order_by => 'order_no'},
{prefetch => ['illust_bind']}
);

こうじゃないのかな

my $records = $table->search(
 {
  belong_dno => $dno
 },
 {
  order_by => 'order_no',
  prefetch => [ 'illust_bind' ]
 }
);

2chは半角スペースが詰められちゃうから
書き込むときは全角でインデントするといいよ

283:nobodyさん
06/08/29 04:13:08 .net
>>276
それなら DBIC::Schema 使えばいいんじゃないかな。


284:nobodyさん
06/08/29 09:36:54 .net
>>276

package MySchemaClass;
use base qw/DBIx::Class/;
# 自動生成


package MyController;
use MySchemaClass;
MySchemaClass->belongs_to(...);

285:nobodyさん
06/08/29 15:58:11 .net
>>277 >>278 >>279
レスを頂きましてありがとうございます。

>>277
ご教授ありがとうございました。
prefetchはorder_byと同じ第2引数に記述するのですね。
今まで第3引数として書いても動作していたのは、
DBICの方で良きに計らってくれたのかもしれません・・・
ただちに直させて頂きました。
インデントの件も御指摘ありがとうございます。
以後気をつけて書き込みさせて頂きます。

286:nobodyさん
06/08/29 15:59:24 .net
>>278 >>279
なるほど、DBIC::Schemaを使用すれば、問題とならないのですね。

Catalystを使う上でもDBIC::Schemaが推奨させているようですので、
私もこちらを非常に使いたいのですが、未熟なため、
DBIC::Schemaを使用してCatalystのヘルパースクリプトを立ち上げられずにいます。

こちらのサイトを参考にして試してみたのですが
URLリンク(en.yummy.stripper.jp)

>script\lc_create.pl model DBIC DBIC::Schema Lc::Schema create=static DBI:Pg:mydb user pass
とプロンプトからヘルパースクリプトを起動させると

>Can't locate object method "use" via package "DBIx::Class::Schema::Loader" (perhaps you forgot to load "D
BIx::Class::Schema::Loader"?)

『もしかしてDBIx::Class::Schema::Loaderをロードし忘れているんじゃないか?』と指摘されてしまいました。
該当場所まで言って、useでロードして見るものの、

>Can't locate object method "use" via package "DBIx::Class::Schema::Loader"
うしろの( )指摘がなくなっただけでして、現在はこちらで立ち止まっている状態です。

推奨されるDBIC::Schemaには切り替えたいですので、今から引き続き挑戦して参ります。
(何か大ポカをやらかしていそうな気がします・・・)

287:nobodyさん
06/08/29 16:02:25 .net

非常につまらないことが原因で本当に申し訳ないのですが・・・orz
>>268の件、ようやく望む通りの動きをするコーティングができました。

my $table = $c->model('DBIC::TblDiary');
$table->belongs_to(illust_bind => 'Test::Model::DBIC::TblIllust', 'have_illustno');
my $records = $table->search(
 {
  belong_dno => $dno
 },
 {
  order_by => 'order_no',
  prefetch => ['illust_bind']
 }
);

「belongs_to」にて最後に繋げたい、主キーではないカラム名を指示するだけだったようです。

お見苦しい質問をいたしまして、本当に申し訳ございませんでした。
レスを頂いた皆様に、心より御礼申し上げます。

288:nobodyさん
06/08/29 19:52:13 .net
おっさんさ、いいかげんにしたほうがいいとおもうよ。

289:nobodyさん
06/08/29 20:56:33 .net
オマエもな

クダらん煽りいれるな

290:nobodyさん
06/08/30 06:13:24 .net
>>284
>>284


291:nobodyさん
06/08/30 10:04:31 .net
>>284
>>285
>>286

はい、終りにしような?

292:nobodyさん
06/10/31 14:14:04 WVctgpP6.net
CatalystでDBIC使ってフォームからの値を一発でアップデート、クリエイトできますか?
以下やってみたけど、エラーとなりまうす
my $result = $c->form;
my $userdata = $c->model('HOGE')->find(uid => $uid);
$userdata->update($result);

あほなのでフォームの値をいちいちハッシュに入れてからじゃないとうまくできないです。
良い方法あったらおしえてください。


293:nobodyさん
06/10/31 14:32:22 .net
>>287
find_or_create


294:nobodyさん
06/10/31 14:39:43 .net
ちょっと伝わらなかったかもしれません。 ごめんなさい。

$userdata->update($result);
これ$resultは$c->formなんですが、これだとエラーになるんですよ。
DBIx::Class::InflateCo


295:lumn::update(): No such column _records いちいち $c->req->param('hoge1')をハッシュに入れて、update(\%hoges)とすればうまくいくんですけど いちいちハッシュにいれなくても良い方法ないですかね。



296:nobodyさん
06/10/31 14:55:03 .net
>>289
$c->formはCatalyst::RequestオブジェクトだからいきなりDBICのupdateに
わたしてもそりゃだめだろう。渡すとすれば$c->form->paramsじゃないか?
チェックはちゃんとしてあるのが前提だけどな。


297:nobodyさん
06/10/31 16:08:20 .net
$c->form->paramsはだめでした。
URLリンク(search.cpan.org)
これためしてみましたが、CatalystのDBICに
__PACKAGE__=>config(additional_base_classes => 'DBIx::Class::WebForm');
入れてみたけど
$userdata->update_from_form($result);
で Can't locate object method "update_from_form" とでてしまう...



298:nobodyさん
06/10/31 16:16:50 .net
>>291
$c->form->paramsが返すハッシュリファレンスの中身は期待しているもの
だったのか確認したのか?

update_from_formはクラスメソッド。使い方がマニュアルと違うじゃん。


299:nobodyさん
06/11/07 13:24:16 oWVVtuaP.net
DBI使ってtextファイルの中身をpostgresのtext型のフィールドに突っ込みたいんですが、
ファイルの中身は変数に一度突っ込んでから
$sth->execut($text);
する方法しかないのでしょうか?
メモリの使用量が心配なんですが、他に良い方法はありませんか?

300:nobodyさん
06/11/07 14:26:05 .net
メモリが心配になるくらいでかいテキスト、突っ込んだあと
どうやって利用するんだ?
取り出すときもメモリの心配するのか?

301:293
06/11/07 17:06:36 .net
>>294
目が覚めますた。

302:nobodyさん
07/01/21 06:10:16 r5E3Q3qv.net
$st = $db->prepare("SELECT student_id,question_update from $tbname; select count(question_update) from results;select count(student_id) from results;");
$res = $st->execute;

while(@res = $st->fetchrow) {
print <<ROW;
<tr>
<td> $res[0] </td>
<td> $res[1] </td>

</tr>
ROW
}

print "$res[2]$res[3]\n";

303:296
07/01/21 06:11:07 r5E3Q3qv.net
DBIについての知識が乏しいのですが、締め切りが近いため、無理やりにプログラムを
作っている状態です。超初心者ですが、よろしくお願いします。

上記のように、$st = $db->prepare()の中に複数のMySQL文を入れることは
可能でしょうか?
また、違う点でもご指摘があればよろしくお願いします。

304:nobodyさん
07/01/22 03:48:16 .net
質問する前に試してみれば。




305:nobodyさん
07/02/01 08:18:29 .net
postgresqlですが、pg_enable_utf8してもフィールド名にはUTF8フラグが立たないようです。
fetchrowにラッパーかます以外、簡単な解決策はないでしょうか。


306:nobodyさん
07/04/12 00:28:59 .net
Apacheのバージョン
Perlのバージョン
DBIのバージョン
DBD::MySQL(PG,Oracle)のバージョン
MySQL(PostgreSQL,Oracle)データベースのバージョン
使える組み合わせの一覧表ってどこかにありませんか?

307:nobodyさん
07/04/12 04:34:06 .net
>>300
つくって公表して。


308:nobodyさん
07/05/06 12:20:49 .net
使えない組み合わせなんてあんの?あんまり経験したことないんだが。

309:あんのたん ◆PDq1wu.iD.
07/10/28 21:35:18 wtKxxX0g.net ?2BP(1004)
PerlからMySQLの.から始まる独自コマンドを実行したいのですが、どのようにしたら良いのでしょうか。以下のコードでやると(near ".": syntax error(1) at dbdimp.c line 271)とエラーが出ます。
use DBI;
$DBName="TestDB.db";

$hDB = DBI->connect(
"dbi:SQLite:dbname=$DBName","","",{PrintError=>0}
);
if(!$hDB){
print "$DBI::errstr ¥n";
exit;
}

$sql =".table;";

$hst = $hDB->do($sql);
if(!$hst){
print $hDB->errstr . "¥n";
exit;
}
print $hst;
$hDB->disconnect;

310:あんのたん ◆PDq1wu.iD.
07/10/28 21:36:29 wtKxxX0g.net ?2BP(1004)
訂正orz
×MySQL ○SQLite

311:nobodyさん
07/10/28 22:08:49 .net
sqliteのドットから始まるコマンドのAPIはDBIにないと思う

テーブル見るだけならsqlite_masterというマスターテーブル?に入ってるから
$dbh->prepare('SELECT * FROM sqlite_master")
とかあとはスクリプトの中からsqliteを直接実行するしかないんじゃないかな

312:あんのたん ◆PDq1wu.iD.
07/10/28 22:17:01 .net ?2BP(1004)
>>305
即答ありがとうございます。sqlite_masterとても参考になりました。

313:nobodyさん
07/10/29 16:37:20 .net
sqlite使ってる人いる?
トランザクションでエラーでまくりなんだけど・・・
DBD::SQLite 1.3


314:nobodyさん
07/10/29 19:34:44 .net
普通に使えてますが

315:nobodyさん
08/04/27 18:20:14 GdnUUJeu.net
MySQLやPerlのDBIのモジュールを組み込んだりって大変じゃないのか。
調べたりすることが多くて、エラーが出てばっかりとかで、時間は浪費するし、
疲れる。困難の連続なんだが。
DBの接続を実現させるだけでも大変。
でも他人は俺とは違い、難なくクリアしてるんか。頭が良くて、要領もいいのか。
どうやって解決してるんだ。


316:nobodyさん
08/04/27 21:25:12 .net
妥当な入れ物を作って、その入れ物に依存したコードを書いたほうがメリットが大きいだろ。
データの永続化としては、CSVもどきやCSV, YAML, Storable, DBMとかあるとおもうけど
DBIでRDBMSが一番手堅くね?

317:nobodyさん
08/04/27 21:25:54 .net
もつろんORMはDBIx::Classなどを御自由に

318:nobodyさん
09/01/12 15:15:30 DVs9WJdR.net
DBIx::Classの話題でないな。
覚えて慣れるまで大変だわ。

319:myYyWxRRQ
09/10/23 02:50:19 .net
I think these people want to hear my logic. ,

320:nobodyさん
09/10/23 03:08:54 Ax+yFrZW.net
>>312
覚えるの大変な割りに使い勝手わりーよ
ちょっと気の利いたことすると、すぐに括弧だらけになっちまう
気を利かせなけりゃDBIx::Simpleで充分だし

321:nobodyさん
10/04/03 19:03:20 E/aWmIoC.net
DBI::mysqlを使用しているのですが、updateをwhileで2万回回して行っている
箇所があります。

うろ覚えではあるのですが、DBIで実装されている機能側でキャッシュして
これを一括で実行する方法があったような気がするのですが、ぐぐっても
出てこなかったので、幻ですかね。。

322:nobodyさん
10/04/06 19:08:31 .net
>>312,314
そんなあなたたちに DBIx::Skinny

323:nobodyさん
10/10/09 14:26:31 .net
DBIx::Skinny のCPAN上の最新バージョンが 0.0721 でなんかちょっとやだ。いや別にいいんだけど。

324:nobodyさん
10/10/09 15:38:48 .net
>>317
「スキニーパンツ見てオナニー」と覚えよう

325:Perl忍者 ◆M5ZWRnXOj6
10/10/14 21:16:17 FhDSY4IL.net
数ヶ月単位

326:nobodyさん
10/11/18 14:10:29 Cpwx90i/.net
IIS <-> Perl <-> OCDB <-> Access(mdb) on WinXP という環境なんですが

mdb上のメモ型フィールドのデータをPerl上で "SELECT memo FROM sampletable" として抽出しようとすると
DBD::ODBC::st fetch failed: [Microsoft][ODBC Microsoft Access Driver]文字列データの右側が切り捨てられました。 列番号 1 (Title) (SQL-01004) at C:\yyy\xxx\www\test.pl line 28.
というエラーが出て、配列にデータが格納されません。

メモ型のみで、テキスト型フィールドのデータはきちんと抽出され、配列に格納されます。

調べてみたところ、メモ型フィールドはSELECTで抽出できないという文章を目にしたのですが
もしそうなのであれば、255Byte以上の文字列はどのようにDBへ出し入れすればよいのでしょうか?

ちなみに、Access上のSQLクエリでSELECTにて抽出した場合には、メモ型フィールドもきちんと抽出されてきます。
同じ命令をOCDB経由で投げると上記エラーが出てきます。
どなたが、救いの手を・・・




327:320
10/11/19 16:01:37 .net
メモ型でもフィールド内が40文字以下ならば、抽出可能なことが判明。
それを超えるとエラーしてしまう。
テキスト型でも、フィールドサイズが255文字までなので、それ以下しか扱えないということになってしまいます。

相変わらず、メモ型の動作が想定外な為、自己解決ならず。

328:nobodyさん
11/01/03 19:39:28 .net
テーブル名にプレースホルダ表記は使えませんか?

$stl = $dbh->prepare("CREATE TABLE ? ( ? char(2) )");
$stl->execute($table_name, $key_name);

文法エラー:
CREATE TABLE 'my_table' ( 'my_key' char(2) )

ほんとうは
CREATE TABLE my_table ( my_key char(2) )
じゃなきゃだめ

329: 【小吉】 【22円】 【46.5m】 電脳プリオン
13/01/01 14:24:28.53 .net ?PLT(12079)
  ∧_∧
  ( ・∀・)      | | ガガッ
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>79
            / ←>>94

330:nobodyさん
23/07/20 06:51:47.60 tRwx+S2Gr
防衛名目の軍拡利権,少子化名目の私利私欲利権、旅行支援名目の氣侯変動災害連發騷音私権侵害の強盜殺人利権による白々しい増税の数々
安全保障を取り巻く状況とか何も変わってないし,原爆使ってみたかった某ならす゛者国家はWW2て゛日本に先制攻撃させる工作してたわけだが.
キチガヰナセ゛レンスキ‐と共謀してのロシア攻撃と同し゛手法で.台湾ついでに曰本も巻き込んて゛自民公明と共謀してクソシナ攻撃したいだけな
貧乏人が子供なんて作ったら遺棄罪で逮捕するのか゛筋た゛ろうに.子供給付とか孑や嫁と得た効用の対価を赤の他人から奪い取る不当利得だわな
他人の孑を連れ込んて゛育てる行為を推進するとか,乱交推進して誰の子か分からなくするとかしないと、憲法の下の平等なんて確保て゛きんた゛ろ
小池デタラメ百合子なんて私立に行かせてる金持ちの親に毎年10萬くれてやるとか.税金て゛個人の資産形成させるなら税金泥棒公務員利権の
ナマポやら廃止して給付付き税額控除とかやるのか゛筋だろ、つか風俗て゛働いて子育てしてる自立した女はいくらて゛もいるた゛ろうに.そんな女と
陳情寄生蟲女と.温室効果カ゛スに騷音にコ□ナにとまき散らして人殺して他人の権利を強奪して儲けてる強盜殺人女とクズっぷり比較してみろ

創価学會員は、何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まで出てる世界最悪の殺人腐敗組織公明党を
池田センセ-が□をきけて容認するとか本気で思ってるとしたら侮辱にもほどか゛あるぞ!
hΤtρs://i,imgur、com/hnli1ga.jpeg

331:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch