Perl::DBI
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パッケージのみのバグなんでしょうか・・・? mysql使うならdbimysql使えばいんでないの? >176 ああごめんなさい、それで動いてからのカキコです。 けど、同じODBC接続でもCSEはちゃんとデータとって来れてるし、あれっ?と思って。 DBD::CSVって最新版ではトランザクションは使えるんだっけ? mysqlのバージョンが4.0.22なのですが TIMEDIFF(expr,expr2)みたいなことをしたい場合どうしたらいいでしょうか。 そうしたい場合はperlで得るepoctimeの値を保存するべき? 質問したいのですが、テーブルの中の番号フィールドと名前フィールドをSELECTしてきて、 に番号フィールドのデータ全てを配列@aに格納、名前フィールドのデータを@bに格納するには どう書いたらよいですか?? DBD::SQLiteがアップデートされたのはいいが、またアトリビュート名がガイドラインにそってないよ。 >$dbh->{unicode} = 1; # fetchしたテキストフィールドのutf8flagがオン 命名のガイドラインに従うなら"sqlite_unicode"だろ。 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 がくるのではないのか… >>189 500エラーだけじゃ情報が少なすぎるので、http鯖の エラーログを見るか、 use CGI::Carp qw(fatalsToBrowser); を使うか、自前でconnectをevalの中で実行して$@を 表示してみるなどして、どういうエラーが出てるかを きちんと調べることをお勧めする。 connectでエラーが起きたときに undef が帰ってくることを利用して エラー処理を行おうと思っているのですが、undef が帰ってこなくて悩んでいます。 ですので、エラーの内容は特に何でもいい感じです。 ちなみにエラーの内容は、ホスト名をわざと間違えて実行しているので、 エラーログにももちろん DBI connect(...) failed: could not translate host name "aaaaa" to address: Name or service not known が出ます。 (エラーの内容はユーザ名間違いでもなんでもいいです) 参考にしているサイトやオライリーのPerlDBI本では、 undefを見てエラーチェックする例が書かれていたので… すいません、190に追記です。 eval , $@ を使えば正しくエラー処理できてますが、 my $dbh = DBI::connect() or mySubRoutine(); のようなことがやりたい感じですが、エラー時でも or以降に行ってくれずdieされてる感じです。 >>192 は、 ×190に追記です。 ○191に追記です。 間違いでした。 スレ汚しすいません… >>194 どういう意味でしょうか?? DBI::connect には option 属性がなかったので。 少なくとも手元の環境では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 >>197 ご指摘ありがとうございます! RaiseErrorが有効になっていたので、 無効にしてみたらちゃんとキャッチできました… なにかものすごい勘違いをしていたようです。 RaiseErrorを無効にしないとdieされるから キャッチできないってオチですね。 大変失礼しました。 Class::DBIをつかってOracle9iにつないでいます。 ORA-01000が出るんですが、原因がわかりません。 常に出るわけではなく、なにをきっかけにしているのか ずーっと悩んでいます。 Class::DBIを使った場合、カーソルが開く(もしくは閉じる)タイミングというのは いつになるんでしょうか? なにかヒントのようなものでもよいので お願いします。 windowsでperlからdbi使ってpostgreSQLに接続しようとすると perl command line iteratorが落ちてしまいます。 そしてMicrosoftへ連絡させられる・・・。 どのあたりに原因がありそうですか? postgreにアクセスしないperlプログラムはちゃんと動くし、 pgAdminからならちゃんとpostgreSQLは機能します。 CPAN使ってDBIとDBD-Pgをインストールしました。 windowsでこの環境構築できた人居ますか? >>201 普通に WindowsXP Pro + ActivePerl 5.6.1 + DBI 1.49 + DBD::Pg 1.21 + PostgreSQL 8.1.3 で動いてますが何か? ちなみにDBD::Pgはppmで貰ってきたやつ。 俺は Windows2000 + perl 5.8.7 built for cygwin + DBI 1.50 + DBD::Pg 1.43 + PostgreSQL 8.0.7 だな。 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以降じゃないからダメ」とインストールさせてもらえないのも結構増えてきた) DBIx::Classの話はここでいい? ある行をselect ... for updateで行ロックかけつつ更新したいんだけどDBICで for updateしつつデータを取得する方法がわからなくて困ってます。 どうすりゃいいの? 自己解決しました。 $rs->search_literal('id = ?) FOR UPDATE; --', $id); search_literalは与えた文字列のまわりを括弧でくるんでくれるので、 FOR UPDATEの部分を外に出すために途中で括弧を閉じ、そのままだと お尻の括弧が余るのでコメントにして無視させるというかなり強引な トリックです。 DBIの話題でいいのかなぁ? データベースはSQLite。 よくある検索画面。1000件中の11〜20件目が2ページに表示されている。 というようなとき、limitやoffsetで取得行数を減らしてパフォーマンスを あげることはよく行われていると思う。 だが検索にマッチした行が全部で何件かを知る必要がある。 limitをつけると、制限した行数しか返ってこないから こういうときSQLを2回発行するしかないんかな? order by してlimitしたりするとき、内部では何行あるか知っていると思うから、 SQL文にlimitつけてても制限されてない行数をしる方法がないかなぁと期待しているんだけど。 >>208 DBIだからこうというよりはSQL一般の話なのでデータベース板の それっぽい質問スレでで聞いたほうが知ってる人に当たる確率が 高いと思われる。 >order by してlimitしたりするとき、内部では何行あるか知っていると思うから、 DBの実装によると思う。 逆に言えば、DBごとに行数を返したり返さなかったりすると思うから、その共通I/FであるDBIでは取得できないと思う。 素直にselect count(*)しなされ。 実装によっては場合によっても違いそうだしな。 ちょうど都合のいいインデックスがあれば 頭からlimit数分順に拾うだけでいいかもしれない わけだし。 時代はDBIx::Class!って事で DBIxでLimit 4,10みたいなのできないんかねー >>214 pagerのことかな。直接limitしたいんだよというときにはかえってめんどくさいが。 あるいはsearch_literalで >>207 とおなじやりかたでlimitもつけられそう。 (試してはいない) DBIx::Class 系で、set_sql する方法きぼん。 compat とかわけわからなす。 スレ違いだったらすみません。DB板から移動してきました。 Perl + Postgresqlのアプリをmysqlに移植しようとしています。 Postgresqlでは複数ステートメントを連結したSQLをDBIで渡して実行できてたのですが、 mysqlでそのまま渡すとSyntax Errorとなってしまいます。 cseというクライアントソフト経由でも同様の症状がありましたが「一括実行」という Pstgresqlでは使ったことのない操作で複数ステートメントを順に実行できました。 Perlで実行するためには何か特殊な設定などが必要でしょうか。 宜しくお願いします。 DBに登録した画像バイナリを読み出して、Content-typeとContent-length指定で ブラウザに表示させることはできたんですが… これ、普通のhtmlと一緒に出す場合はどうするのでしょうか? >>219 httpがわかっていれば出来ない質問だな >220 mhtファイルを自前で生成するとか?(笑) 辿る道のりは人それぞれなのね。俺なんてバイナリ型なんて扱ったことないし。 バイナリ出力するスクリプトの横に別のHTMLを作って、<img src="./hoge.cgi"> なんて書いてみよう。 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() ; だと×。なして? - Class::DBI - Class::DBI::Sweet - DBIx::Class::Schema お好きなのをどうぞ。 >>223 > $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' ); $sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" ); じゃないか?「'」 だと$iが展開されないぞ。 > $sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" ); そんな書き方してると、注入されますよ? いつからか忘れたけどDBD::mysqlがlimitの引数にplaceholder使えなくなったとおもう。 プレースホルダで渡すときにクォートされるからこんなSQLになってる LIMIT '0',3 ってかエラー吐いてるの見ればわかるでしょ? >>226 ギャグで言ってる?$iの汚染チェックするのは当然だろ。 オレは223の解釈が違ってるからレスしただけだ。 そもそも223の最後の例はプレースホルダ使ってないし。 sjisをsjisのまんまMySQLに渡したいんですが、2バイト目が0x5cのマルチバイト文字 ([\x81\x83\x84\x89-\x9F\xE0-\xEA][\x5C])で不具合がおこります。 十十十十 → 十十\十十\ 十と一を足すと十一 → 十と一を足すと十\一 と2文字毎に\マーク(0X5C)が入ってしまいます。 これはDBI内部でのエスケープ時のバグでしょうか? 携帯電話用なのでなるべくSjisを使いたいという前提で、解決法がありましたら教えてください。 >>232 内部処理はUTF-8かEUCでやって出入り口のみでSJISと変換する。 これが一番楽だと思う。内部処理をSJISでやるのはお勧めしない。 どうしてもやりたければ同じような変な現象があとからあとから出て 来るので、それととことん付き合う覚悟でどぞー。 >>233 お返事ありがとうございます。 携帯電話ユーザーなので、当たり前に機種依存文字を使ってきます。 丸囲み数字や、絵文字など。 他文字コードに変換すると極めて都合が悪いのです。。 文字コード変換前にそれぞれ絵文字や機種依存文字をマッピングしてやればいいのかもしれませんが、 その労力も大変なものなので、どうしたものかと >>233 こういうの使うのも面倒なの? http://search.cpan.org/ ~hio/Unicode-Japanese-0.34/Japanese.pm ありゃアンカ間違えた >>235 は>>234 へのレスね >>236 auに対応してないですね。 絵文字のマッピングは途中までやってるので続きやってみようかな。 それと、機種依存文字か。 他にsjisからutf8に変換するときに注意するような文字ってありますかね? Sjisに戻すという事を前提に。 \マークが全角バックスラッシュになるのは確認してるんですが。 Encode-JP-Mobile ってーのは何だか使えそうだが、どうだろう? Encode::from_to( $string, "CP932","UTF8",Encode::FB_XMLCREF); でIBM外字全部処理してくれるんですね。 こりゃ便利だ。。Encode使ってなかったよ(-o-; すでにスレ違いだけどEncode-2.13以降なら「FB_」はいらないらしいよ > Encode 2.13以降ではfrom_toのfromの段階、すなわちdecodeの際にはcheckせずとにかくutf8化し、 > toの段階にあたるencodeの際にcheckを適用するという風にしたのですが、 > その結果、FB_(PERLQQ|HTMLCREF|XMLCREF)のFBが不要になったのです。 http://blog.livedoor.jp/dankogai/archives/50502791.html http://kawa.at.webry.info/200605/article_11.html 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) ご存知の方、ご指導よろしくお願いします。 >>241 つーかなんでuseじゃなくてrequireで読んでるのよ。 (ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって) #!/usr/perl5/bin/perl use DBI; foreach (DBI->available_drivers('TRUE')){ print "$_\n"; } >>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にパスを追加する方法は、わかっておりません。 続き ★インストール方法2 CPAN http://search.cpan.org/ ~timb/DBI-1.51/DBI.pm から DBI-1.51.tar.gz をダウンロード。 gnuの make と gcc をダウンロード&インストール。 http://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)の環境が災いしているとか・・・ >>244 仕事でそんなレベルのことで悩んでるのなら、とっとと辞めればいいのに。 >>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 を使うようにしてください。 >>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 を使うようにしてください。 了解しました。手引き有難う御座います。 >>246 > 重大なエラー: 再配置エラー: ファイル そのDBIじゃなくて素直に http://search.cpan.org/ ~timb/DBI-1.51/ のDBI使おうよ。 恐らく /u01/app/oracle/OraHome_1/以下略 にある方はインストールまたはコンパイルに失敗しているんじゃない? それと同名のモジュールで http://search.cpan.org/ ~timb/ とは別物という可能性もあるでしょ。 インストール方法はREADME読め。 つーか読まなくとも perl Makefile.PL make make test make install とする手順はほぼ全てのモジュールで変わらないっての。 ちなみにPerl 5.6.xだと警告(「5.6系列なんてもうサポートしてねーよ」)と出るからできればPerl 5.8.xにすることが望まれる。 5.6のまま使い続けたいのなら、警告無視してそのままインストールを強行するか、古いバージョンのDBIを落としてインストールすればいい。 > 了解しました。手引き有難う御座います。 了解したのに質問してるしw ごめん。 間違えた。 誤 >>246 正 >>247 >>248 README読みました。 【http://search.cpan.org/ ~timb/DBI-1.39/の結果】 ※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 $ $ 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敷居高い。 (゚∀゚)アヒャ! その程度もなんとかできない程度のスキルならインテル版Solaris使うのは ちと荷が重いんじゃないかな... 仕事ならご愁傷様。 Solaris10のフルインストールでインストールされるgccとmakeを使っても結果は同じでした。 Solaris + Intel + 32bitの場合のOracleの選択肢は、Solaris9 + Oracle10gの 組み合わせしかないし、Solaris10のZFSを使いたいと思っているので、 素直にphp + MySQLを使う方がストレートのような気がしてきました。 ちゃんとした技術のあるところへ再委託したほうがいいよ。 で、出来た時間でじっくりお勉強。 まあまあ、よくハマル話なんで、愚颶ると結構出てくることだから。 ただ、エラーメッセージちゃんと読まずに問題を切り分けられないからって、 DBI に文句言うのはメ。 ヒント: gcc の -fPIC に当るのが SUN謹製 cc の -KPIC。Perl は寂しがり屋 だから自分とおそろいのコンパイラが好き。 皆様ありがとうございました。 申し訳ないのですが php + MySQL で問題無く構築できました。 ッッッッッッッッッッッッッッッッッッッッ〜〜〜!!! ば・・・ばかな! 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 >>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されています。 ふせたいヶ所が結果でバッチリ見えてるとか オレっておちゃめw ぐっすり睡眠をとってからmake uninstallで指定されているファイルをrm -fして 再インスコしたらDBD::Pgが動作しました。 /usr/local/pgsql/lib/libpq.so.4 のシンボリックリンクを /usr/lib/libpq.so.4 に作った事が吉とでたようです。 ちなみに>262の言う通り警告は問題なかったようです。 環境は、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を窓口にして転送してます。 もっと簡易なシステムを作りたくご相談します。 こういう場合、メールアカウントを作る必要もないのでしょうか? スマソ。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にするにはどうすれば良いのか、誰か教授して貰えないだろうか あ〜、うまくインデントできなかった・・・ 見辛い文体で申し訳ないorz 周り見ていると、質問者はみんな丁寧語だ・・・ こちらもスマンかった とりあえず、DBICについてはスレ違いかもしれないので 初心者板でも行ってきます 【初心者】 λ...... >>271 レスありがとうございます。 えっと、申し訳ないですが、そこはすでに拝見させて貰いました・・・ (かなり詳しく書かれており、非常に重宝させて頂いています) リレーションですが、モデルのファイルに設定を書き込まずに Catalystのコントローラーにて書きたい点と、 TblDiaryが主キーのカラムじゃない点で頭を悩ませています 説明不足で申し訳ありませんでした。 かなりググったのですが、探し方が足りないのか 未だにネットでは見つからずにいますorz 実際にCatalystを使っておられて、CDBIを使用されている方は おられるでしょうか? う〜ん、すみません 説明がヘタで申し訳ないです・・・ 主キーではないTblDiary.have_illustnoと連結させたいので、 このhave_illustnoというカラムを何らかの方法で illustnoというカラムとリレーション指定を行いたいです (このままでは、主キーのカラムであるTblDiary.paranoと連結してしまいますので) 希望するhave_illustnoへと連結できるよう、どのようにコントローラーに 指示を送れば良いのかが分からないです。 read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる