※ ChatGPTを利用し、要約された質問です(原文:PEAR・MDB2のモジュールロードについて)
PEAR・MDB2のモジュールロードについて
このQ&Aのポイント
PEAR・MDB2のモジュールのロード方法について質問があります。
質問1: 上記ソースをパターン2の方法で記述するにはどのように直せばいいでしょうか?
質問2: モジュールの呼び出し方として、プログラム的に綺麗な書き方はパターン1なのでしょうか?
使用環境ですが、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なのでしょうか?
上記以外に、ソース的に綺麗な呼び出し方があれば教えてください。
長くなりましたが、よろしくお願いします。
お礼
回答ありがとうございます。 モジュール名が違っていたということですね! ありがとうございました。