

使用環境ですが、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なのでしょうか?
上記以外に、ソース的に綺麗な呼び出し方があれば教えてください。
長くなりましたが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
少し調べてみたのですが、executeMultipleメソッドを持つのは、Extendedモジュールのようです。
http://pear.plus-server.net/package.database.mdb …
exExecuteMultipleとして呼ぶか
$mdb2->extended->executeMultiple(); //$mdb2->loadModule('Extended')を叩いた後で。
として呼べばいけるんじゃないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
PHP8を使うと、大量のWarningが...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
php 完了画面の送信メールのコ...
-
csvファイルについて教えて下さ...
-
PHPの変わった閉じタグの必要性...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
順位を付ける時のスコアの重複...
-
cakephp2.6でfindを使い合計値...
-
「ローマ字 -> ひらがな」へPHP...
-
Zend_Form_Element_Hash
-
xmlからphpで出力したデータを...
-
1~100の数字の9の倍数だけ同じ...
-
月一覧を取得するには?(20120...
-
codeigniterのページネーション...
-
file_get_contentsなどでrefere...
-
PHP 別ドメインへのファイル保存法
-
file_existsでファイル名の部分...
-
配列をループでたくさん宣言し...
-
C言語の配列をPush(追加)する...
-
Resource id #3 と表示されま...
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
CArrayのソート
-
PHPのカッコ[ ]の使い方について
-
String だと「 ByRef引数の型が...
おすすめ情報