【PHP】PEAR Part3
MDB_QueryToolで3つのテーブルをJOINしたいんだけど、 どうやったらいいのか分かりません。 表A Id,a_name 1,name1 2,name2 表B Id,b_name 1,name1 2,name2 表c Id,c_name 1,name1 2,name2 A.id = B.id and A.id=C.id and B.id =C.idの条件で結合して Id,a_name,b_name,c_name が欲しいんだけど、どうやって3表をJOINしたらいいのか、 JOINの条件はどう指定したらいいのか分からないので、 教えてください。orz select * from A natural join B natural join C でどうかしら? >>4 d。 でも可能な限りMDB_QueryToolでやってみたいのです。 SQLなら select A.Id,A.a_name,B.b_name,C.c_name from A,B,C where A.id = B.id and A.id=C.id and B.id =C.id でも良いと思うのです。 MDB_QueryToolじゃJOINの入れ子は無理かなぁ。 出来たとしても、インラインビューとかサブクエリの使えない MySQL3.23では実行できない可能性も高いけど・・・orz >>5 http://pear.php.net/manual/ja/package.database.mdb-querytool.api.php ドキュメント見る限りsetJoinでテーブル名3つと条件まとめて指定か addJoinでテーブルと条件をそれぞれ追加していけばいいんじゃないか? QueryTool使ったことないのでなんとも言えないが >>6 d setJoin(Array('A','B','C'),'A.id = B.id and A.id=C.id and B.id =C.id'); とかやってみればいいのかな。 最初にsetJoin + addJoinでやってみたけど、 getQueryStringが戻ってこなかったんだよ。orz とりあえず、QueryTool使わずに 目的の戻り値は得られたんだけど、 もうちょっと精進してみるわ。 sendmail_path 『/usr/sbin/sendmail -t -i』 $params['sendmail_path'] = "/usr/sbin/sendmail"; $params['sendmail_args'] = "-t -i"; $mail =& Mail::factory('sendmail', $params); を行うと、PEARで下記のエラーが返ってきます。 Unable to find class for driver sendmail サーバーではsendmailが使えるはずなのに、sendmailへのパスが見つからないということでしょうか? 解決しました。 原因はMailディレクトリをアップロードしていませんでした query()とexecute()の違いが良く判りません 日本語マニュアルだとquery()は >パラメータ $params を指定しており、クエリ内で プレースホルダを使用している場合に、 prepare() および execute() の代わりに使用されます。 とのことなんですが、execute()でもプレースホルダは使えますよね・・・ query()を使った方が性能がいいんでしょうか。 >>11 DBはもう使うなMDB2使え で、MDB2ではSELECTする時はquery、INSERT/UPDATE/DELETEする時はexecだ データを要求して受け取るのかDB内部でデータ操作を行うのかの違いだ ありがとうございます MDB2の学習をしてみようと思います こんにちは 追加インストールした二つのモジュールについて質問です。 ------------------------------------------------- require_once "HTTP/Request.php"; require_once "HTTP/Client.php"; ------------------------------------------------- Request.phpは読んでくれるのですが Warning: main(HTTP/Client.php) [function.main]: failed to open stream: No such file or directory となります。 HTTPディレクトリには両方とも入っており(その下のクッキーマージャーも)正常だとは思うのですが… .httには「php_value include_path ".:/home/ああああ/pear/PEAR"」と書いてあります 何かコンフィグを編集しないといけないのでしょうか? include_pathの通ってるところにファイルが無いだけ 別のディレクトリに再インストールして 改めてパスを通したら動作しました。 どうしてRequestは動いてclientは見つけてくれなかったんだろう… PEARのDB使うとクエリ実行のときに勝手にSQL分がエスケープされてるの? Spreadsheet_Excel_Writerで、日本語データをxlsで書き出すと、セル内の改行に♪が加わってしまうことがあります。 このような場合、一度セルを編集状態にすると♪が消えるのですが、この時フォント欄が文字化けしとります。 setFontFamilyの値は英語フォント前提のようなのですが、これって指定した方がいいですか? ____ / ─ ─\ / (●) (●)\ どれ、そろそろ回答が… | (__人__) | .________ \ `⌒´ ./ .| | | ノ \ | | | ____ /::::::─三三─\ 華麗にスルーー /:::::::: ( ○)三(○)\ |::::::::::::::::::::(__人__):::: | ________ \::::::::: |r┬-| / | | | ノ:::::::::::: `ー'´ \ | | | >>21 ∧__∧ ( ´・ω・)∧∧l||l /⌒ ,つ⌒ヽ ) (___ ( __) "''"" "'゙''` '゙ ゙゚' ''' '' ''' ゚` ''"" "' Spreadsheet_Excel_Writerって使い物になるのかな? Readerの方は使えんね。 日本語入れてちょっと複雑にしたら すぐに読めなくなる。 この間は途中のシートを削除したら シート情報が正しく読み取れなくなった。 いったん、Exce95形式で保存したりして復旧させたが。 まあ使えんといいながら、開発ツールとして使ってはいるわけだが。 >>20 PHP Excel Creator Libraryがいいんじゃね? http://pizzaseo.com/php-excel-creator-class 個人的にはExcel_Reviserがオススメだけど。 xoops界隈の開発者のソースに、何かを期待している方が間違っているってことが まだ分からないのかw WindowsのPHPだとネイティブにExcelを扱えなかったっけか。 pearを使ってみたいのですが、どうすればインストールできるのかわかりません。 ネットにあるようにやってみましたが、自分が何か間違っている様で、動いてくれません。 MS-DOSでphp\pearと入力すると PHP_PEAR_INSTALL_DIR is not set correctly please fix it using your environment variable or modify the default value in pear.bat the current value is: となります。 注意する点としてPATHがどうのこうの書いてあったので、setで見てみると PATH=C:WIN〜;C:\php ”PHP_PEAR_INSTAL_DIR=C:\php|pear” "PHP_PEAR_BIN_DIR=C:\php" "PHP_PEAR_PHP_BIN=C:\php\.\php.exe" となっています。 何か問題があるでしょうか?また、他に確認しないといけない点はどこでしょうか? PATHって、%PATH%とか入れといた方がいいんでないの? ユーザ側の環境変数で追加する場合は。 msconfigでやってみようと思ったのですが、サイトに書かれていた状況と違ったので断念しました。 ただ、PATH=C:WIN〜に「;C:\php」しろって書いてあったのですが、setで見てみると既にあるっぽいので良いかと… というか、書かれてた状況になってないのが既に問題なんですけどねw でもどうやってもその通りにならないのです。ver.が違うからだとは思うのですが… >>32 で、バージョンはいくつよ。 経験上、4.3以降ならgo-pear.bat実行した後、 出来たregファイルをダブルクリックして、 レジストリ登録すれば滅多なことはないはずだが。 >>33 出先から失礼します。php5 の初期ver.です。 go-pear.batに問題がある(今は新しいのになってるらしい)と書いてたサイトがあったので、 最初のパッケージに入っていたのと、新しいgo-pear.batを試しましたがダメでした。 regファイル実行するとOKみたいな表示は出るのですが…なりません。 HTTP_Request を使い始めたんですが、これってメモリリークしてませんか? Pagerのリンクに出てくるindex.phpって消せないんですかね? PEAR DBのプレースホルダに ?と|と&があるみたいなんだけど |ってmysqlの生sqlでも意味ある文字でしょ? まずくないの? PEARのパッケージにソースコードをハイライトしてhtmlに変換するものはないんですか? 欲しいもの ・PHPのソースコードをhtmlで読めるようにする。(例えば開始タグを<phpにする) ・ついでにソースコードに色をつける(例えば<span class="method">print</span>('hogehoge');) >>35 そのままだと、読み込んだページを全部保持してるんだよ。 解除するオプションがあったはず。名前は自分で調べてくれ。 EventDispatcherてだれが使ってんだ? PEAR::DB使ってみたのだが、メモリリークが激しい・・・ 使い方間違っているのか・・・ 俺は何度でも書くぞ PEAR DBはもうバグFIXしかされねてねーんだ 速くて便利で現在もアップデートされているMDB2使え >>45 ちなみに今PEAR DB使ってる場合、 乗り換えって結構簡単? >>46 簡単だ、DB使ってるなら機能的には同じ機能がMDB2にもある メソッド名が変わってるものは http://www.phpied.com/db-2-mdb2/ で対応がわかる 「DB MDB2 移行」あたりでぐぐれば他の情報も出てくるだろう よっぽど変なことしてない限りは既存のソースの 名前を一括リプレースしていくだけでほぼ移行できるはずだ、 まあもちろんテストは必要だが HTTP_Clientでhttpsにログインしたいんだけど、無理ですか? >>49 --with-openssl で可能と思いますが。 PEARのMDB2+php4.4.7を利用してMySQL4.0.26(日本語に最適だと思って)に接続しています。 テーブルのカラム名にふんだんに日本語を利用しているのですが、 @php標準のmysql_field_name関数でカラム名を取得した場合 APEAR::MDB2のarray_keys($inQueryResult->getColumnNames())にて取得 (カラム名の取得方法が分からないので苦肉の策;)した場合 @だと正確に日本語を取得できるのですがAだと一部(だから厄介)日本語が化けますし、大文字の英字が小文字になります。 例:ユーザID → ユーブid パスワード → パベワード レコード → レビード 分かる方いらっしゃいましたら回避方法をお教えいただけますでしょうか。 また、まだ使い始めなのですがPEAR::MDB2はこういう症状は多いのでしょうか? まず相談内容が文字化けしてる点ね。 パベワード レビード は、かわいいから許してやって。 >>51 カラム名にマルチバイト文字なんて使うなよ どうしてもって言うならMDB2の場合 Reverseモジュールをloadしてtableinfoメソッドで取ってみるとか ていうかカラム名にマルチバイト文字なんて使うなよ > 分かる方いらっしゃいましたら回避方法をお教えいただけますでしょうか。 > また、まだ使い始めなのですがPEAR::MDB2はこういう症状は多いのでしょうか? こんな事言ってるってことは、このデータベースをセットアップしたのは 51じゃないんじゃないか? 恐らくセットアップした本人がバックれて、尻拭いさせられてるんじゃw 52-54さん 回答ありがとうございます。 DBですが、先輩の引退につき、まったく部署や開発チームは違ったんですが 私が引き継ぐことになったものです。 PEAR自体は私の独断で使ってみようかなと思った次第です。 あれからも色々と調べたのですが、文字化け以前に53さんのおっしゃる TableInfo()すらCallできずundefined methodやfunction on a non-object も回避できない状態でしたので、自分にはまだクラスまわりの勉強が不足 していると判断しました; 納期の関係もあるので現在上手くいっているphp標準関数で取り合えずは 処理し、しかし気になるのでPEARは個人的に気長に追いかけるとします。 そしてやっと今から個人的なPEARを追う時間です。 $mdb2->loadModule('Manager');でManagerのロードには成功し、 listTables()などをCallできるのですが $mdb2->loadModule('Reverse');でReverseのロードに失敗しているのか 分かりませんがTableInfo()がundefined methodとなってしまいます。 Managerがロードできているので環境や設定ファイルは大丈夫だと思うの ですが、また、ディレクトリやそれぞれのmysql.phpと中身のメソッドは 存在するのですが、何が原因かどなたか分かりますでしょうか。 >>55 ManagerはロードできるのにReverseだけうまくいかないのかあ とりあえずloadModuleは失敗してたらPEAR_Errorを返すから $result = $mdb2->loadModule('Reverse'); if (PEAR::isError($result)) { echo $result->getMessage(); exit(); } してみてReverseのloadModuleが失敗してないか調べてみるとか 51=55です、55の補足です。 ●Manager $mdb2->loadModule('Manager'); $buff = $mdb2->manager->listTables(); var_dump($buff); →成功(php4では「manager->」必須のようです http://manual.jpnote.net/pear/package.database.mdb2.intro-manager-module.html ) 「manager->」を除いた場合 buff = $mdb2->listTables(); →Call to undefined method: mdb2_driver_mysql->listtables() ・・・ ●Reverse $mdb2->loadModule('Reverse'); $buff = $mdb2->TableInfo(); var_dump($buff); →Call to undefined method: mdb2_driver_mysql->tableinfo() in ・・・ 「Reverse->」を足した場合 $buff = $mdb2->Reverse->TableInfo(); →Call to a member function on a non-object in ・・・ いまいちphpのエラー内容は解釈苦手なのですがReverseの2つのエラー はどちらも解答に近づいていない気がします。 >>56 さん 返信ありがとうございます、確認してみましたところとくに表示は出てきませんでした。 『Reverse モジュール (API) - スキーマのリバースエンジニアリングを MDB2_Reverse_Common クラスで抽象化します。』 という記載がマニュアルにあったので @スキーマを別途インストールして検証してみます。 また、どうにもMDB2+php4でそもそも動くのかというところから検証すべく Aphp5+MDB2で検証してみます。 会社の環境は変更できないため自宅で環境を作ってからの検証 になりますので気長にやります。 他、なにかヒントになるような確認事項等ありましたらお願いします。 あと、回答遅くなりましたが日本語でのカラム名ですが、 たしかにおっしゃる通りです。私もこれまで思ってはいましたが実際挑戦する ことになったのは今回が初です。 しかしながら、「もしも気兼ねなく日本語使えたら」という思いで頑張ります。 オープンソースの世界では無謀な挑戦かもしれませんが。 pear つながらん go-pear.org 自体がなくなってるって、あかんやろ! んで、 http://pear.php.net/go-pear もつながらん! PEARインストールできひんやんけボケ PHP6でpearがコアに統合されたから役目が終わったんだろ 「下らねぇ…」スレが荒れてますので、こちらで質問させてください。 特段の変更無く PHP をインストールした場合、pecl は勝手にインストールされるものですか? それとも、設定の変更や、PHPとは別に後で追加する必要があるものですか? (PHP 5.2.4、Apache/2.2.6、FreeBSD 6.2-RELEASE) 回答ありがとうございます。 リンク先のマニュアルは先日読んだのですが、イマイチ理解できませんでした。 ここで説明しているのは PECL 拡張モジュール のインストール方法ですよね? pecl の実行プログラム(管理プログラム) のインストールはどうなのでしょうか? 「PECL は PHP 拡張モジュールのリポジトリで、 PEAR パッケージシステムを経由して使用可能です。」 とありますが、PEARを使って、PECL をインストールするという意味でしょうか? 【誤】 とありますが、PEARを使って、PECL をインストールするという意味でしょうか? 【正】 とありますが、PEARを使って、PECL の管理プログラムをインストールするという意味でしょうか? イマイチ理解できませんでしたじゃなくて 自分の全能力をかけて理解しろ。 >>65 まずpeclコマンドがあるか調べる $ which pecl パスが出てくるなら入ってる、not foundなら入ってない 特段の変更無くインストールしたって言ってもソースから入れたのか ディストリのパッケージシステムで入れたのかconfigureでも色々変わってくる pearを入れたらpeclコマンドも付いて来たと思う ソースからphpを入れてる場合、configureでpearインストールを offにしてない限りはpearが入るので普通はpeclも入る パッケージでphpを入れただけの場合はおそらくpearは入らない、 debianではphp-pearというpearのパッケージにpeclコマンドが同梱されている 俺はdebianを使っているのでBSDのportsが どういうパッケージ構成かは知らないが おそらくportsでも同じようにpearのパッケージに含まれてるんじゃないかと思う なのでパッケージで管理してるならpearのパッケージを入れてやれば良い 基本的にこういうのはUnix/Linux周りの話だ これという回答は環境によるのでこれくらいしか答えられん 俺はportsでpear入れるの嫌だなぁ。 pearがパッケージになってるのに、 それをさらにportsするってあんまり意味がない。 >>71 はPEAR自体ではなく、PEAR内の様々なパッケージにおいて。 勘違いされてるとアレなので、 >>70 でpearのパッケージと書いてるのは 「PEAR自体(PEARインストーラ)」のこと あとそれが良い悪いの話じゃなく あくまでpeclインストールにおける説明の話 >>71 もちろん俺も「PEARモジュールのパッケージ」はPEARで入れている aptでPEARモジュールを入れたりはしないし俺も嫌だ >>70 現時点で、pecl コマンドは存在しています。 そのコマンドがどの時点でインストールされたのかを把握したいのです。 サーバ管理者と pecl について認識の違いがありまして。 > ソースからphpを入れてる場合、configureでpearインストールを > offにしてない限りはpearが入るので普通はpeclも入る まさに知りたかった核心部分です。ありがとうございます。 > PHP5の仕様としてpecl(の管理プログラム)が導入されますが、 > peclの拡張モジュールを導入しなければ、 > 正常に動作することは御座いません。 というのは、正しいのでしょうか? ローカルではPEARのインストールできたのですけど、レンサバではインストールできないってことはありますか? ちなみに候補はロリポ、ハッスル、tok2です。 レンサバによるんだろうが、最悪 ローカルでインストールしたPEARをフォルダごと、 レンサバに転送すれば使える 携帯サイト用にKemp上でNet_UserAgent_Mobileを使ってるんですが Fatal error: Call to a member function getModel() on a non-object in Net/UserAgent/Mobile.php on line 170 となってはまってしまってます。同じ症状なった方いますか?PHPは5.2.5です。 最近pearはじめました $DB = NewADOConnection(_DB_TYPE); $DB -> pconnect(_DB_HOST, _DB_USER, _DB_PASS, _DB_NAME); $table = _DB_SALOON_KIHON_TB; $sql="select * from ".$table." where uId = ".$_SESSION['uId']; $sqlResult = $DB -> Execute($sql); $obj = $sqlResult->fetchnextObject(); として、以下を実行しても値が取れないんだけどどこが問題ですか?(接続などはOKです) echo $obj->Fields[loginPass]; print_r($obj->Fields); の結果は? >>83 ありがとう それの結果は戻ってきません print_r($sqlResult); は配列?で大量に戻ってくるんですが… 解決しました 解決じゃないんだけど、 $obj->カラム名というやり方で目的は達成できたということで… >>83 ありがとう >>84 var_dump($obj);の結果は? peclのid3を pecl install id3 ってやって全部うまくいって入ったんだけど 入れた後はどうやったらその関数使えるようになるの? インストールしたあとすぐにつかえるとおもって <?php print_r(id3_get_tag("test.mp3")); ?> ってファイル作ってもなにも動作しないや・・・ なんか設定必要? 一応アパッチの再起動かけたけど駄目だった >>87 php.ini に直接か php.d/id3.iniを作って extension=id3.so //id3.soであってるかどうかは知らん。 と書かなきゃいけないんじゃね。 その後、apache再起動。 もしくはdl()でロードするとか。 >>88 php.iniに extension_dir = "/usr/lib/php/modules" って書いてあって /usr/lib/php/modulesには id3.soが入ってるからいいかなぁって、おもったけど >>88 さんのとおりやったらできた ありがとうございます いや、そこは ttp://jp.php.net/manual/ja/install.pecl.php を見て、 extension_dirと extensionの違いが分かりました、とかそういう自己レスが欲しいところかと・・・ >>91 それはphp.iniに書いてある ; Note that it should be the name of the module only; no directory information ; needs to go here. Specify the location of the extension with the ; extension_dir directive above. って所読んだら extension_dirはモジュールファイルが置いてある場所の指定だけで extension=ext.soを使って動的に読む込むという風に自己解釈して終わらせちゃいました。 すみません リンクを読んで勉強したいと思います どうでもいいことなんだけど、いちいち言い訳をしないと前に進まない奴なんだな。 まぁ、言い訳ばっかりして、ちーとも前に進まない輩も多いのでまだマシなだけどな。 おまけに2ちゃんねるで鵜呑みにするのも危ないが... まぁがんばれ。 どうでもいいことなんだけど、謝ることより他に言うべきもっと大事なことがあるだろうと・・・ 死んでる。Webも見れんし、インストールもできん。日曜プログラマの俺涙目・・・ お色直ししてました。 pearコマンド(接続先も)も変わったので、使っている方はご注意あれ。 質問させてください。 現在、PHP 4.3.9が稼動している共用レンタルサーバにて 自分が扱えるディレクトリに FTP クライアントを使って パッケージ・マネージャを設置し、ブラウザでアクセスする形で、 PEAR を使える環境を整えたく思っています。 そこで http://pear.php.net/go-pear にブラウザでアクセスして そこで表示されるソースを go-pear.php として保存、 これをサーバにアップロードして、ブラウザでアクセスしたのですが、 「Downloading package: ***」のところで反応が無くなってしまいます。 どのパッケージをダウンロードしている所で止まるかは、 毎回変わるのですが、頻度としては「HTML_Template_IT-stable」か、 「Net_UserAgent_Detect-stable」の所でダメになることが多いです。 どのような方法を使えば PEAR を使用できるようになりますでしょうか? どなたかご教示ください。よろしくお願いします。 read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる