• 締切済み

PHP5 DB_DataObjectクラスを教えて

PHP5 PEAR入門初心者です。 ただいま DB_DataObjectクラスを勉強中ですがエラーがでて困っています。 PHP ver5.2.4 xampp ver1.6.4 PEAR 1.4.1 参考文献は独習PHPです。 sqlite2 データベースsqlite(chap6.SQLite)の内容ははsqliteManager表示して確認しています。 内容は以下のとおりです。 エラー内容DB_DataObject: ERROR: autoload:Could not find class DataObjects_Book using class_location value DB_DataObject: ERROR: factory could not find class from book Fatal error: Call to undefined method DB_DataObject_Error::selectAdd() in C:\xampp\htdocs\dokushuu\find.php on line 7 find.phpの内容↓ <?php require_once('DB/DataObject.php'); $config=parse_ini_file(dirname(__FILE__).'/myConfig.ini',TRUE); $options=&PEAR::getStaticProperty('DB_DataObject','options'); $options=$config['DB_DataObject']; $book=DB_DataObject::factory('book'); $book->selectAdd(); $book->selectAdd('title'); $book->published='翔泳社'; $book->orderBy('isbn ASC'); print($book->find().'件が検索されました。<br />'); while($book->fetch()) { print($book->title.'<br />'); } ?> myConfig.iniの設定内容↓ [DB_DataObject] database="sqlite2://localhost/C:/xampp/htdocs/dokushuu/sample/samples/chap6/chap6.sqlite" schema_location="C:/xampp/htdocs/dokushuu/sample/samples/chap6" class_location="C:/xampp/htdocs/dokushuu/sample/samples/chap6" require_prefix=C:/xampp/htdocs/dokushuu/sample/samples/chap6/ class_prefix=DataObjects_ debug=3 以上です宜しくお願い致します。

みんなの回答

回答No.2

Book.phpはそのファイルの内容を見た感じだと、自動生成されるものなのかもしれませんね。 ただ、今回は教材に付属のCD-ROMかなんかでデータをコピーしてきたものとかなんだったら 教材にさいしょからそのファイル内容は、生成済みのファイルとしておいてあるのかもしれません。 ちなみに、 C:/xampp/htdocs/dokushuu/sample/samples/chap6 というパスにファイルが置いてあるのが前提のプログラムなんですが、 このパスにきちんとファイルが置いてありますか? このパスが違うと、正しくロードされないと思います。 例えば、xamppをインストールしたときに、 「C:/Program Files/xampp/」なんて場所にインストールしちゃっていたら 当然myConfig.iniのパスは全部書き換える必要があります。

kazuyar7
質問者

お礼

親身にありがとうございます。 C:/xampp/htdocs/dokushuu/sample/samples/chap6 というパスにファイルが置いてあるのが前提のプログラムなんですが、 このパスにきちんとファイルが置いてありますか?ということですが C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Justsystem\JSLIB32;C:\Program Files\Intel\Wireless\Bin\;C:\Program Files\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files\Edy\Edy Library;C:\Program Files\QuickTime\QTSystem;C:\php;C:\xampp\mysql\bin\;C:\Program Files\QuickTime\QTSystem\;C:\xampp\sqlite;C:\xampp\php;C:\xampp\htdocs\dokushuu;C:\xampp\htdocs\dokushuu\sample\samples\chap6 でchap6フォルダーにmyConfig.ini find.php chap chap6.sqliteをおいてあります。 xamppをインストールしたときに、 「C:/Program Files/xampp/」なんて場所にインストールしちゃっていたらということですがc:/xampp/になっています。 hogehoge78さんのいうとおりmyConfig.iniの設定あたりがあやしいと思いますので、もうすこし頑張ってみます。 ありがとうございました。

回答No.1

DB_DataObjectは使ったことないんですけど、下記はどうでしょう。 確認1 find.phpと同じ場所に、myConfig.iniはおいてありますか? 確認2 myConfig.iniの中に設定してある、class_locationの値が各クラスを置く場所だと思いますが そこには、Book.phpがおいてあって、Book.phpの中にはDataObject_Bookクラスが記述されていますか? 結局のところ最初のエラーは、factoryするクラスが取得出来なかったよ、といった内容です。 二番目のエラーは、最初にクラスがfactory出来てないので、当然その次の記述でこけるのでその為のエラーです。

kazuyar7
質問者

お礼

早速回答ありがとうございます。 まだ問題は解決していませんがまずはお礼を 確認1ですがfind.phpとmyConfig.ini同じフォルダー内にファイルをおいています。 確認2ですがBook.phpはおいてあります。 内容は以下のとおりです。 <?php /** * Table Definition for book */ require_once 'DB/DataObject.php'; class DataObjects_Book extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ public $__table = 'book'; // table name public $isbn; // VARCHAR(25) primary_key public $title; // VARCHAR(100) public $price; // INT(0) public $published; // VARCHAR(20) /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_Book',$k,$v); } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE } あとBook.phpというのは生成されるファイルなんでしょうか? ファイル更新日が2005/10/15になっています。 ちんぷんかんぷんな質問で申し訳ないです。