PEAR・MDB2のモジュールロードについて

このQ&Aのポイント
  • PEAR・MDB2のモジュールのロード方法について質問があります。
  • 質問1: 上記ソースをパターン2の方法で記述するにはどのように直せばいいでしょうか?
  • 質問2: モジュールの呼び出し方として、プログラム的に綺麗な書き方はパターン1なのでしょうか?
回答を見る
  • ベストアンサー

PEAR・MDB2のモジュールロードについて

使用環境ですが、php5.3.1 MDB2において、「createTable」や「executeMultiple」などは、モジュールのロードをしなくてはいけません。 そのロード方法をサイトで見たのですが上手く行かなかったので、質問させていただきました。 まず、ロード方法の3つのパターンなのですが サイトURL ttp://pear.plus-server.net/package.database.mdb2.intro-module.html ttp://pear.plus-server.net/package.database.mdb2.intro-manager-module.html ・1つめのパターン PHP4と5ともに使える ーーー // Manager モジュールを読み込みます $mdb2->loadModule('Manager'); // PHP4 および PHP5 $mdb2->manager->createTable( 'test', $definition, $table_options ); ーーー ・2つめのパターン 'modules' オプションで PHP5 のオーバーロードを利用する ーーー // モジュール名の短縮形を、メソッド名の先頭に付加します。 // そして元のメソッド名の最初の文字を大文字にします。 $tables = $mdb2->mgCreateTable( 'test', $definition, $table_options ); ーーー ・3つ目のパターン PHP5 のオーバーロードを使用して、読み込んだモジュールのメソッドをコールする ーーー $mdb2->loadModule('Manager'); // 注意: PHP5 では __autoload() が使用できるので、 // 上の行は次のように書くこともできます。 $tables = $mdb2->createTable( 'test', $definition, $table_options ); ーーー パターン2の方法で、テーブルを作成し、データを挿入するプログラムを書いたのですがエラーが出ます。以下ソース ーーー <?php require_once("./test/root_config.php"); require_once("MDB2.php"); $mdb2 =& MDB2::factory( $DSN ); if( MDB2::isError( $mdb2 ) ){ die( $mdb2->getMessage() ); } $definition = array( 'name' => array( 'type' => 'text', 'length' => 10 ), 'tosi' => array( 'type' => 'integer' ) ); $mdb2->mgCreateTable( 'test', $definition ); $alldata = array(array('one',1), array('two', 2), array('three', 3), array('four', 4)); $sth = $mdb2->prepare('INSERT INTO test VALUES (?, ? )'); $mdb2->mgExecuteMultiple($sth, $alldata); ?> ーーー 実行すると Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'MDB2_Driver_Manager_mysql' does not have a method 'executeMultiple' in C:\xampplite\php\PEAR\MDB2.php on line 1934 と出ます。 ちなみに、この時点ではテーブルは正常に作成できていてデータの挿入が上手く行きませんでした。 また、パターン1の方法で「createTable」や「executeMultiple」を記述すると上手く行きました。 質問1 上記ソースを、パターン2の方法で記述するにはどのように直せばいいでしょうか? 質問2 php4を使う予定はないのですが、モジュールの呼び出し方として、プログラム的に綺麗な書き方はパターン1なのでしょうか? 上記以外に、ソース的に綺麗な呼び出し方があれば教えてください。 長くなりましたが、よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

少し調べてみたのですが、executeMultipleメソッドを持つのは、Extendedモジュールのようです。 http://pear.plus-server.net/package.database.mdb2.intro-execute.html exExecuteMultipleとして呼ぶか $mdb2->extended->executeMultiple(); //$mdb2->loadModule('Extended')を叩いた後で。 として呼べばいけるんじゃないでしょうか。

googleoooo
質問者

お礼

回答ありがとうございます。 モジュール名が違っていたということですね! ありがとうございました。

関連するQ&A

  • MDB2のcreateTableでテーブル作成

    宜しくお願いします。 php5 MySQL PEAR Win7 XAMPP にて開発中です。 表題にもありますように、 $mdb2->loadModule('Manager'); ※$mdb2には前処理としてDBへの接続も完了しています。 を唱えて、 下記のテストテーブルをDBに作成しようとしています。 $definition = array ( 'id' => array ( 'type' => 'integer', 'unsigned' => 1, 'notnull' => 1, 'default' => 0, ), 'name' => array ( 'type' => 'text', 'length' => 255 ), 'datetime' => array ( 'type' => 'timestamp' ) ); $res=$mdb2->createTable("events",$definition); しかし、エラーでテーブルが作成できません。 色々調べて、色んなパターンを検証してみましたが、どうもお手上げです。 エラーは、下記のようなものです。。 ※print_r($res);で吐いたものです。 MDB2_Error Object ( [error_message_prefix] => [mode] => 1 [level] => 1024 [code] => -27 [message] => MDB2 Error: insufficient permissions [userinfo] => _doQuery: [Error message: Could not execute statement] [Last executed query: CREATE TABL・・・・・・・・・・・・・・・・・・・・・・ このあと永遠と長文が続きます。 ちなみに、 $request=$mdb2->listTables(); これだと、DB内に今あるテーブルがきちっと配列で返してくれます。 したがって、 $mdb2->loadModule('Manager'); は、ただしく読み込まれていると思われます。 だめなのは、テーブル作成の$mdb2->createTableに原因が絞られるようなきもしますが、 これ以上、自力ではなんともできず、お力をお借りしたいと思い書き込みました。 不足情報がれば補足しますのでよろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR MDB2 のsetFetchModeが設定がうまくいきません

    お世話になります。 Pearのmdb2を使用し始めたのですが、 setFetchMode(DB_FETCHMODE_ASSOC) の記述をしても、データが連想配列形式になりません。 (数値添え字の配列になってしまいます。) 何か問題として考えられることはありませんでしょうか。 環境は、 CentOS5 apache 2.2.3 php 5.1.6 mysql 5.0.22 (すべてRPM) です。 ソースは下記のとおりです。 $mdb2 =& MDB2::connect( $dsn, array() ); if( PEAR :: isError( $mdb2 ) ){ $errmsg .= "データベースの接続に失敗しました。<br />"; }else{ //連想配列で取り出す $mdb2->setFetchMode(DB_FETCHMODE_ASSOC); $res =& $mdb2->query('SELECT * FROM tablename'); if (PEAR::isError($res)) { $errmsg .= "SQLの実行に失敗しました。<br />"; } print("<pre>"); while ($row = $res->fetchRow()) { print_r($row); } print("</pre>"); // 接続断 $mdb2->disconnect(); } アドバイスがあればぜひよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php pear mdb2に質問です。

    php pear mdb2に質問です。 以下の関数でエラーが出ます。 間違っているところがあれば、回答お願いします。 function product_info($id) { global $db; $res = $db->query("SELECT * FROM product WHERE id=?", array($id)); if ($res != null) { $row = $res->fetchrow(MDB2_FETCHMODE_ASSOC); return $row; } return null; }

    • ベストアンサー
    • PHP
  • PEAR::MB2によるPHP+MySQLについて

    PEAR::MB2でPHP+MySQLを勉強中なのですが、特定カラムの値を取得することができません。 下記のソースコードで、変数$aaaをechoで参照すると空白となってしまいます。 大変恐縮ですがご教授のほどよろしくお願いいたします。 [環境]----------------------------------------------------------- OS: windows7(64bit) PHP: ver5.3.8 MySQL: ver5.5 Pear::MDB2  pear/MDB2 2.5.0b3 2.4.1 database abstraction layer  pear/MDB2_Driver_fbsql 0.2.0 fbsql MDB2 driver  pear/MDB2_Driver_ibase 1.5.0b3 ibase MDB2 driver  pear/MDB2_Driver_mssql 1.5.0b3 mssql MDB2 driver  pear/MDB2_Driver_mysql 1.5.0b3 1.4.1 mysql MDB2 driver  pear/MDB2_Driver_mysqli 1.5.0b3 mysqli MDB2 driver  pear/MDB2_Driver_oci8 1.5.0b3 oci8 MDB2 driver  pear/MDB2_Driver_odbc 0.1.0 ODBC Driver for MDB2  pear/MDB2_Driver_pgsql 1.5.0b3 pgsql MDB2 driver  pear/MDB2_Driver_querysim 0.6.0 querysim MDB2 driver  pear/MDB2_Driver_sqlite 1.5.0b3 sqlite MDB2 driver  pear/MDB2_Driver_sqlsrv 1.5.0b3 sqlsrv MDB2 driver  pear/MDB2_Schema 0.8.5 XML based database schema manager  pear/MDB2_TableBrowser 0.1.2 Database table abstraction library (pear list -allから一部抜粋) [ソースコード]----------------------------------------------------------- require_once("MDB2.php"); $dsn = "mysql://user:pass@localhost/db_name"; $conn = MDB2::connect($dsn); // 接続に失敗したらメッセージを表示して終了 if (MDB2::isError($conn)){ die($conn->getMessage()); } //フェッチモード設定 $conn->setFetchMode(MDB2_FETCHMODE_ASSOC); //SELECT文 $sql = <<<EOS SELECT * FROM db_table WHERE name = 'taro' EOS; //実行 $res = $conn->query($sql); //エラーチェック if (PEAR::isError($res)) { die($res->getMessage()); } //値の取得 $row = $res->fetchRow(); //変数$aaaに、別カラム値(例:miyoji)を格納 $aaa = $row['miyoji']; echo "$aaa"; //←(例)mysqlから田中といった苗字を出力したい。 //クローズ $conn->disconnect(); ----------------------------------------------------------------------- エラー出力はありません。

    • ベストアンサー
    • PHP
  • PEARのソースが一部しか読み込めない

    PEARをインストールしたのですが、phpのソースからのrequireがうまく行きません。 phpinfo()で見ると include_path .:/usr/local/PEAR .:/usr/local/PEAR となっており、実際 $ ls /usr/local/PEAR/ のコマンドで Archive/     MIME/   docs/ Config/   OS/   pearcmd.php* Config.php*   PEAR/   pearfrontendweb.php* Console/   PEAR.php*   peclcmd.php* HTML/   Structures/   tests/ MDB2/   System.php* MDB2.php*   data/ となります。 このうちPEARディレクトリ直下のConfig.phpやMDB2.phpなどは require 'Config.php'; require 'MDB2.php'; としてもエラーはおきません。 ですが、たとえば/usr/local/PEAR/OS/Guess.phpを使用しようとして require 'Guess.php'とすると、 Warning: require(Guess.php) [function.require]: failed to open stream: No such file or directory in /Users/muttuwo/Sites/test.php on line 2 Fatal error: require() [function.require]: Failed opening required 'Guess.php' (include_path='.:/usr/local/PEAR') in /Users/muttuwo/Sites/test.php on line 2 というエラーが出てしまいます。 PEAR直下のファイルしか読み込めない状態です。 include_pathはうまく行っているっぽいのでなぜか良くわかりません。。 エラーの原因を教えていただければ助かります。

    • ベストアンサー
    • PHP
  • MDB2 [Call to undefined method MDB2

    MDB2 [Call to undefined method MDB2_Error::execute()] 以下のようなMDB2を利用したSELECT文を書きましたが、 最終行で、 Call to undefined method MDB2_Error::execute() が出ます。 どのように修正すれば良いでしょうか? ===================================================================================== require_once('/usr/share/pear/PEAR/MDB2.php'); $db=MDB2::connect('mysqli://【user】:【password】@localhost/【dbname】?charset=utf8'); if(PEAR::isError($db)){ die($db->getMessage()); } $sql = 'select * from user where name=? and password=?'; $types = array('text','text'); $stmt=$db->prepare($sql, $type, TRUE); $data = array('guest' , 'guest'); $res = $stmt->execute($data); ===================================================================================== 下から3行目の$stmtがMDB2_Errorオブジェクトなのまでは分かるのですが、 どう対処すればよいかが不明です。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PEAR auth で認証ができません

    PHP初心者で、PEAR Authによるsqliteを使用して認証のテストを行っています。 コード: <?php require_once "Auth.php"; function loginFunction() { echo "<form method=\"post\" action=\"test_auth.php\">"; echo "<input type=\"text\" name=\"username\">"; echo "<input type=\"password\" name=\"password\">"; echo "<input type=\"submit\">"; echo "</form>"; } $dsn = array( 'phptype' => 'sqlite', 'database' => 'test.sqlite', 'mode'=>'0644' ); $options = array( 'dsn' => $dsn, 'table'=>"schedule_usr", 'usernamecol'=>"username", 'passwordcol'=>"password" ); $a = new Auth("DB", $options, "loginFunction"); $a->start(); if ($a->checkAuth()) { print("認証しました。"); }else{ print("認証していません。")); } ?> エラーなどは表示されませんが、「認証しました」が表示されません。 test.sqliteではschedule_usrテーブルに username=test password=1111を 入力してあります。パスワードはmd5()で変換したものを入れてありますが、 「認証していません」が表示されてしまいます。 コード自体に問題があるのでしょうか? ご教示願います。

    • ベストアンサー
    • PHP
  • PEARのパッケージがインストール出来ない

    PHPの初心者です。 WindowsXP, Apache 2.2.8, PHP 5.2.5をインストールした環境です。 PEARパッケージマネージャーのインストールまで漕ぎ付け、 Archive_TAar 1.3.2、 ConsoleGetopt 1.2.3  PEAR 1.6.1、 Structures_graph 1.0.2 の三つが、インストール出来たようですが。 モジュールのインストールを試みると、 C:\>pear install PEAR_Info No release avaqilable for "pear.php.net/PEAR_Info" Cannot initialize 'channel://pear.php.net/PEAR_Info',invalid or missing package file Package "channel://pear.php.net/PEAR_Info" is valid install failed となります. inclued pathは c:\php\pear迄通っています。 また、C:\php\tmpというフォルダーがあり、 \Archive_Tar_.3.2 \ConsoleGetopt_1.2.3 \Structures_Graph_1.0.2の三つのフォルダが中に有りますが? どのようにしたらよいか、お願いします。

    • 締切済み
    • PHP
  • 「PEAR::Auth認証」の結果による判別について

    現在、PEAR::Authを利用して認証処理を作成しております。 質問させていただきたい内容は、 AuthクラスのgetAuthメソッドについてです。 まず、Authクラスのインスタンスを生成し、 start()メソッドを実行して認証を行い、 その認証の結果をgetAuthメソッドによって 取得しております。 次に、getAuthメソッドにより得た結果を IF文で判別して、結果がTRUEの場合は処理を続行し、 結果がFALSEの場合はログイン画面に戻るように 制御しようとしたところ、 FALSEの場合の制御が思うように動作しませんでした。 以下に、ソースを記述いたします。 login_check.php ************************************************* <?php require_once("Auth/Auth.php"); $params = array( "dsn" => "pgsql://postgres:postgres@win/db", "table" => "test_table", "usernamecol" => "test_user", "passwordcol" => "test_passwd", "cryptType" => "none", ); // インスタンス生成 $auth = new Auth("DB", $params , "LoginFuntion"); // 認証開始 $auth->start(); // 結果を判別 if (!$auth->getAuth()) { // 結果がFALSEだったらログイン画面に戻る header("Location: ./login.php"); exit; } else { // 結果がTRUEであれば処理を続行 ・ ・ ・ } ?> $auth->getAuth()の使い方が違うのかも知れませんが、 Authのソースを見ても分かりませんでした。 どなたか、「PEAR::Auth認証」の結果による判別に ついてお教え下さい。。。 ※今回は、ログイン画面とチェックPHPを分けております。 ログイン画面はHTMLで、チェックPHPにAuthを利用しております。 この利用の仕方が既に間違っているのでしょうか? 併せてお教えいただければと思います。

    • 締切済み
    • PHP
  • PEAR AUTH 認証エラーClass 'PEAR_Error' not found

    Fatal error: Class 'PEAR_Error' not found in E:\Program Files\xampp\php\PEAR\DB.php on line 946 アクセスすると上記のエラーが出ます。 以前まで認証できていたのですが何をいじったのか ログインフォームがでなくなりました。 環境は以下の通りです。 ApacheFriends XAMPP (Basispaket) version 1.6.8 Apache 2.2.9 MySQL 5.0.67 (Community Server) PHP 5.2.6 + PHP 4.4.9 + PEAR あまり理解していないので質問を質問で返す可能性がありますが よろしくお願いします。 *********************************************** <?php require_once("../../php/PEAR/Auth/Auth.php"); require_once("loginform.php"); $params = array( "dsn" => "mysqli://hoge:hoge@localhost/hoge", "table" => "test", "usernamecol" => "user", "passwordcol" => "pass", "cryptType"=>"md5", 'db_fields'=>"*" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); ?> ***************************************************

    • ベストアンサー
    • PHP

専門家に質問してみよう