Pear
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
NGNG0897nobodyさん
2005/05/20(金) 00:01:48ID:wjKv+x9sなるほど、そんな使い方もできたんですね。
ちなみにPAERのエラー処理って、PEARライブラリ製作者用のクラス
であって、PHP4のエラー処理として推奨されているわけではないのかな?
今すごく迷っているんですけど、
PHP4のエラー処理で最も適しているのは以下のどれになりますか?
識者のご意見お聞かせ下さい。
1、メソッドの戻り値で判断する
2、標準のエラー処理用関数郡を使う
3、PEAR基底クラスのエラー処理を使う
0898nobodyさん
2005/05/20(金) 15:49:22ID:???俺はPEAR_ErrorStack使ってる。
マニュアル以外で解説見たこと無いが、個人的にはPEAR_Errorより好き。
ttp://pear.php.net/manual/en/core.pear.pear-errorstack.intro.php
ここ読めば大体の使い方は分かるので、一度読んでみて。
0899nobodyさん
2005/05/21(土) 18:41:50ID:???もう 2 年くらいソレでがんがん使ってる。問題ない。っつーか快適。
デバッグ時は backtrace させて (昔は Xdebug とか PEAR::VarDump 無かった)、運用時は小山氏@雑誌連載式にログったりメール飛ばしたり。
>>897
ケースバイケースで組み合わせ。
> 例外処理が無いのでエラー処理が非常に面倒
とか見ると Java の人?と思っちゃう。
PHP の世界に入ってきたのなら、PHP の流儀を意識した方が幸せになれると思う。
ErrorStack いいらしいですね。
最近勉強してないな…
0900nobodyさん
2005/05/22(日) 21:41:19ID:???例外処理なんてJava以前から余裕であるわけだが。
0901nobodyさん
2005/05/23(月) 01:17:27ID:???という話。
0902nobodyさん
2005/05/23(月) 02:07:06ID:???sqlite_create_functionは使えませんか?
「Warning: sqlite_create_function() expects parameter 1 to be resource
」
というエラーが出るんですけど。
ソースはこんな感じです。
$db = DB::connect($dsn);
sqlite_create_function($db, 'NOW', 'time', 0);
0903nobodyさん
2005/05/23(月) 02:12:39ID:???したらnull?
0904nobodyさん
2005/05/23(月) 03:53:41ID:???Nullではないです。
サンプルではsqlite_create_functionを使う場合は
sqlite_open関数を使っているので、PEAR::DBでは
エラーになってしまうのかと思ったのですが。
0905nobodyさん
2005/05/23(月) 10:34:57ID:???PEAR なら、エラーオブジェクトという事もある。
0906nobodyさん
2005/05/23(月) 13:06:09ID:???DB::connect() の戻り値はSQLiteのリソースハンドルじゃなくて
DB_sqliteオブジェクトなので、そのままsqlite_xxx関数には渡せないよ。
どうしても使いたいなら
sqlite_create_function($db->connection, 'NOW', 'time', 0);
のようにDB_sqliteから接続ハンドルを取り出さないと。
0908nobodyさん
2005/05/29(日) 00:33:18ID:3agdROOk0909nobodyさん
2005/05/29(日) 00:59:27ID:???というか、動かなかったらおそらくバグなので
bugs.php.netに報告よろ
0910909
2005/05/29(日) 01:09:41ID:???PEARパッケージのバグは、各パッケージのページ
http://pear.php.net/package/パッケージ名
のBugsタブから。
0911nobodyさん
2005/05/29(日) 07:39:53ID:oziLOzHHありがとうございます。PHP5対応は考慮されているんですね。
それでは逆に、PHP4の互換保持は考慮されているものでしょうか?
0912902
2005/05/29(日) 16:33:06ID:???お世話になった者です。
PEAR::DBを継承させたmyDBクラスを作ってSQLiteで色々な
関数を使えるようにしてみました。
これで他のDBからSQLiteへの移行が比較的楽にできるのではないかと
思うのですがどうでしょうか?
ソースは次レスで。
0913902
2005/05/29(日) 16:34:16ID:???<?php
require_once("DB.php");// DB
require_once("sqlite_func.php");// SQLite用ユーザー定義関数
class myDB extends DB {
function connect($dsn) {
$db =& parent::connect($dsn);
// SQLiteのユーザー定義関数
sqlite_create_function($db->connection, 'NOW', 'time', 0);
sqlite_create_function($db->connection, 'DATE_FORMAT', 'date_format', 2);
return $db;
}
}
?>
ユーザー定義関数(sqlite_func.php)
<?php
function date_format($timestamp, $format) {
return strftime($format, $timestamp);
}
?>
0914902
2005/05/29(日) 16:34:48ID:???<?php
require_once("myDB.php");// DB
// DBオブジェクトの生成と接続
$db =& myDB::connect(DSN);
// エラーチェック
if (PEAR::isError($db)) {
$this->error($db->getMessage());
}
// データ取得
$sql = "SELECT"
. " DATE_FORMAT(NOW(), '%Y/%m/%d %H:%M:%S') AS today,"
. " FROM t_hoge"
;
$res = $db->getAll($sql, DB_FETCHMODE_ASSOC);
// エラーチェック
if (PEAR::isError($res)){
$this->error($res->getMessage());
}
// DB切断
$db->disconnect();
?>
0915902
2005/05/29(日) 16:38:00ID:???0916nobodyさん
2005/05/29(日) 16:48:45ID:???抽象化したいなら、抽象化度の高い MDB2、DB/MDB_QueryTool のようなクエリビルダや Propel、DBDO といった ORM 使ってみ。
0917nobodyさん
2005/05/29(日) 18:47:10ID:???DBDOって判りづらいだろう。DB_DataObjectのことね。
あと、速度重視するならADODBとPDOも選択肢に追加。
0918nobodyさん
2005/05/30(月) 19:32:29ID:RWhNHsSfフォーム中にJavaScriptを埋め込む事って可能?
例えば、select1の選択内容によって、select2の内容を変更するって感じのものを作りたいんだけど、
selectタグの属性に「onChange="hoge()"」って感じに属性を記述することは可能?
0923nobodyさん
2005/05/31(火) 12:11:30ID:???0924nobodyさん
2005/06/01(水) 19:08:06ID:???なんでvalideteだけを独立して使うことはできんの?
0925nobodyさん
2005/06/01(水) 20:12:55ID:???0926nobodyさん
2005/06/02(木) 02:12:22ID:???ルールの複数定義を嫌って無理矢理使ったような記憶があるが…
0927nobodyさん
2005/06/02(木) 07:11:22ID:???単に display() とかを使わなければいいだけでは.
addElement() したくない,ってことなら,
おとなしく PEAR の Validate を使ってひとつひとつ自分でチェックすべし.
0928nobodyさん
2005/06/02(木) 22:14:43ID:???checkboxの値をupdateAttributesで更新しても、freeze()したときに、
hiddenの値が、1にならないか??
よくよくしらべていると、freeze時にhiddenを生成するときに、
getValueを呼び出してるんだが、
checkboxクラスのgetValueは、getCheckecの戻り値を返すようになってるから、
結局セットされる値が1になってしまう。。。
解決方法ある??
ガイシュツだったらスマソ
0929nobodyさん
2005/06/02(木) 22:25:06ID:???0930nobodyさん
2005/06/02(木) 22:38:46ID:???0932nobodyさん
2005/06/02(木) 23:12:50ID:5Bd9W1e0ありがとう、できました。
0934nobodyさん
2005/06/04(土) 17:49:54ID:???0935nobodyさん
2005/06/04(土) 18:59:06ID:???0936nobodyさん
2005/06/18(土) 04:12:26ID:???DB_common::escapeってpregつかってるから、
もしかしてexecuteにEUC-JPな文字列突っ込んでうまくいってるのって
たまたまだったのか?
orz
0937nobodyさん
2005/06/18(土) 04:19:01ID:???Shift-JISなら問題出るかもしれないけど、EUC-JPやUTF-8なら大丈夫だろ。
基本的に被らないし。
0938nobodyさん
2005/06/18(土) 06:43:29ID:???自作アンテナなんだけど、たまに止まるからなんでかなーとおもってたんだが、
よく見たら^Mが入ってた。同じURLで改行コード混在してるページが原因。
それとったら動いたよ。
あとpregがあるのはescapeじゃなかったけど、まあいいや。
ありがとう。
0940nobodyさん
2005/06/24(金) 19:13:08ID:pYTM6kF2<form action="..." method="...">のname="..."の部分を消すことはできないんでしょうか?
0941nobodyさん
2005/06/25(土) 23:56:31ID:???誰か実際に使ってる人いたら解説キボンヌ!
0942nobodyさん
2005/06/26(日) 00:04:52ID:???0943nobodyさん
2005/06/26(日) 10:23:37ID:???<?php
$qf->removeAttribute('name');
?>
しかし色々とマトモに動かなくなるので実質は消すことは不可能と考えた方が.
なんで消したいのかを提示してみては? 何か別の解決策があるかもしれない.
0944nobodyさん
2005/06/26(日) 15:15:17ID:???XHTML1.0 strictは<form>にnameつけちゃだめっていうルールがあるらしくてそのためにと思ったんですが
0945nobodyさん
2005/06/26(日) 15:46:45ID:???それは,廃止予定だから使用「すべきでない」であって,使用「してはならない」ではないのでは……?
XHTML1.1 では name 属性が廃止されているけど,その場合でも,
適合ユーザエージェントは処理できない属性を無視「しなければならない」ので,問題はおきない.
そこをきちんと処理できない Validator の類ではエラーが出るかもしれないけど.
……と自分は理解しているんだけど,間違ってたら指摘おねがいよー
0946nobodyさん
2005/06/27(月) 13:53:32ID:???あったら教えて下さい。
0947nobodyさん
2005/06/27(月) 18:17:49ID:???XML_HTMLSax
ttp://pear.php.net/package/XML_HTMLSax
XMLカテゴリにあるから見つけにくいんだよな。
0949nobodyさん
2005/06/27(月) 22:46:11ID:???次は pdo 対応ですかね…… 5 だと DBDO に行っちゃうのかな?
0950nobodyさん
2005/06/27(月) 23:00:15ID:???PHP5なら
$MDB2->setFetchMode(MDB2_FETCHMODE_OBJECT, "someClass");
して、さらに
$result = $MDB2->query($SQL, null, true, "MDB2_Iterator");
foreach($result as $row) {
/* あれこれ */
}
これ最強。
0952nobodyさん
2005/07/05(火) 23:29:52ID:BWLWbomG// これだと単一のセルになります
$WorkSheet->write( 1, 0, "1列目", $Format1 );
シートもしくはブック全体に共通の書式を初期設定する方法がわかりません。
教えてください!
0953nobodyさん
2005/07/05(火) 23:38:09ID:???>>950
> 今さらMDBよりMDB2に対応して欲しいと思う今日この頃。
DB_DataObject の MDB 対応は MDB2 だわ.
ていうか MDB1 は対応してないのかな.
MDB といえば当たり前のように 2 を指してるかのように書いてある.
0954nobodyさん
2005/07/06(水) 22:39:04ID:???0955nobodyさん
2005/07/11(月) 01:02:19ID:???pear upgrade-allができない…orz
0956nobodyさん
2005/07/12(火) 10:50:02ID:???三つのフォームのうち一つしか記入されていなかったら
JavaScriptでエラーを出したいんだけど、方法はありますか?
三つのフォームにすべて入力されている場合と、
三つのフォームすべてが入力されていない場合は
エラーを出さないようにしたいのです。
0957956
2005/07/12(火) 14:06:19ID:???一応載せておきます
$areaCode = $form->createElement('text', '', null, array('size' => 4, 'maxlength' => 3));
$phoneNo1 = $form->createElement('text', '', null, array('size' => 4, 'maxlength' => 3));
$phoneNo2 = $form->createElement('text', '', null, array('size' => 5, 'maxlength' => 4));
$form->addGroup(array($areaCode, $phoneNo1, $phoneNo2), 'phoneNo', 'Telephone:', '-');
$form->addGroupRule('phoneNo', 'Please fill all phone fields', 'required', null, 3, 'client');
$form->addGroupRule('phoneNo', 'Values must be numeric', 'numeric', null, 3, 'client');
0958956
2005/07/12(火) 14:28:32ID:???0959nobodyさん
2005/07/12(火) 15:20:27ID:???http://pear.php.net/manual/en/package.html.html-quickform.html-quickform.addformrule.php
0960nobodyさん
2005/07/12(火) 15:23:14ID:???それは、自前で書くしかないんじゃないかなぁ?
0962956
2005/07/12(火) 15:32:52ID:???やっぱりそうですか。
自前で書くのも考えましたが、quickformが吐き出すjavascriptに
書き加えるのは単純には行かないですよねぇ・・・
0963nobodyさん
2005/07/14(木) 12:06:23ID:eHIEjUS2DBのときはescapeSimple()関数使ってたんですが・・・。
0964nobodyさん
2005/07/15(金) 22:10:16ID:???ttp://cvs.php.net/diff.php/pear/HTML_QuickForm/QuickForm.php?r1=1.156&r2=1.157&ty=u
あまりにも長い間放置されてたんで何かポリシーあるのかと思ったが,
やっぱし単にバグだったのか……
開発者たちは Freeze() って使ってないんだろーか?
0965nobodyさん
2005/07/18(月) 15:34:03ID:qAc2zP8J0966965
2005/07/18(月) 15:46:54ID:???$radio[] = &HTML_QuickForm::createElement('radio', null, null, 'hoge1', 0);
$radio[] = &HTML_QuickForm::createElement('radio', null, null, 'hoge2', 1);
$form->addGroup($radio, 'hegohego', 'blah');
$form->addElement('radio','','','','')だけじゃ表示されないのね。。
0967nobodyさん
2005/07/20(水) 21:28:44ID:Qqvr7DcanextId()でシリアル値を生成し、INSERTしているのですが、
INSERTされたシリアル値を取得することはできるのでしょうか。
SQLiteを使っています。
Postgresの場合、oidからselectして取得できるのですが、
せっかくPEARを使っているので、特定DBに依存しないやり方が知りたいです。
よろしくお願いします。
0968nobodyさん
2005/07/22(金) 01:08:44ID:???PEAR::DBのquery()または、execute()で実行されたSQL文をログに出力したいと考えています。
現在は、下記のようにquery()またはexecute()を実行する直前でログに出力しています。
$sql = "select * from table";
$logger->debug($sql); // ここでログに出力
$db->query($sql);
しかし、このような場合は実行されたSQL文を出力できません。
$sql = "insert into table (col1, col2) values(?, ?)";
$params = array(
'val1',
'val2'
);
$sth = $db->prepare($sql);
$logger->debug($sql);
$db->execute($sth, $params);
この場合は、"insert into table (col1, col2) values(?, ?)"がログに出力されますが、
実際に実行されたSQL文(?が実際の値に置換された状態)をログに出力できません。
プレースホルダを使用した場合に、プレースホルダが置換された状態のSQLを取得するには
どうすればいいでしょうか。
[環境]
PostgresSQL 8.0
PHP 4.3.11
Apache 2.0.52
Windows2000 SP4
よろしくお願いします。
0969nobodyさん
2005/07/22(金) 01:20:46ID:IizYuRm3マニュアルによると、
$id = $db->nextId('mySequence');
という使い方をしているから、既に取得できていると思われるのだけど?
ttp://www.1x1.jp/php/manual_pear/html/package.database.db.intro-sequences.html
0970nobodyさん
2005/07/22(金) 16:29:41ID:???PEAR::DBでは発行されたSQLをログに残す機能はないので、
PostgreSQL側でログに取るほうが楽だと思う。
どうしてもPHP側でやりたければ、DB_pgsql::simpleQuery あたりに
ログを吐くコードを埋め込むのがいいんじゃない?
既存のPEAR::DBのコードを変更したくない場合は、DB_pgsqlを継承したクラスを
つくって、それをDB::connectの返値からうまく生成すればできると思う。
0971nobodyさん
2005/07/22(金) 17:24:28ID:???接続時に、オプションでdebug levelを上げれば、どっかでとれそうな気がする。
気がするだけなんだけど。
$db =& DB::connect($dsn, array( 'debug' => 2));
とか
0972nobodyさん
2005/07/22(金) 19:48:46ID:???> 接続時に、オプションでdebug levelを上げれば、どっかでとれそうな気がする。
それではとれない。
ソース読めば分かるけど、PEAR::DBではdebug levelはあまり使われておらず
2以上を指定したときに、各DBドライバのロード時のエラーが表示される
という目的にしか使えない。つまり役に立たない。
0973968
2005/07/23(土) 00:11:48ID:???できれば、PEAR::DBのコードを修正せずにやりたいので、
DB_pgsqlを継承する方法を試そうとしましたが、
DB::connectの返値からDB_pgsqlを継承したクラスをうまく生成する方法が
思いつきませんでした。
今のところ、PostgreSQL側でログを取るという方法が現実的のようです。
ありがとうございました。
0974nobodyさん
2005/07/24(日) 22:40:09ID:???> プレースホルダが置換された状態のSQLを取得するには
今回は pgsql だけの話でいいのかもしれないけど,
そもそもプレースホルダの機能ってのは,
単純に文字列として ? を何かに置き換えるって話だけじゃない機能なので,
「置換された状態のSQL」なんてものは存在しない RDBMS もある.
つまり,発想自体が誤りなので,その機能を DB に要求するのは無理があると思う.
ところでそろそろ次スレの季節かな?
>>990あたりが作ればいいのかな.
0975nobodyさん
2005/07/27(水) 05:36:52ID:3RtjRt/fこれを入力エラーで修正中や、freezeして確認する時などにも、
随時効かすようにできないですかねぇ。
0976nobodyさん
2005/07/27(水) 11:48:51ID:???0977nobodyさん
2005/07/27(水) 22:47:41ID:???ふと思いついただけだがそんな糞コードを書いてはいけないヨ?
0978nobodyさん
2005/07/28(木) 12:05:29ID:???0979nobodyさん
2005/07/28(木) 23:18:56ID:???縦方向のalignが設定できない(アクセサが無いだけ?)のと、
マージしたセルにフォーマットを適用できないのが致命的。
これならEXCELで作った雛形ファイルをXML形式で保存して、
テキスト置換で編集した方がまし(OfficeXP以降しか読めないけど)。
早くベータ版から正式版にならんかな。
0980975
2005/07/29(金) 02:58:42ID:???ユーザは、自分がpostした値が、どのようにフィルタされて受け取られるかを
確認できた方がいいんだけどなぁ。
なんだかHTML_QuickForm、便利は便利なんだけど、ぼみょー感を感じます・・。
0981nobodyさん
2005/07/29(金) 06:19:14ID:???出来るだろ。
レス数が950を超えています。1000を超えると書き込みができなくなります。