使用環境ですが、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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
NGワード設定もしくはテキス...
-
プルダウンメニューにDBの内容...
-
file_get_contentsなどでrefere...
-
大切なPHP用語
-
PHPでCSVの一部の行を編集したい
-
UTF-8のXMLがSJISのPHPで文字化け
-
file_existsでファイル名の部分...
-
PHPで変数名にハイフンを使うに...
-
CSVファイルの最終行のデー...
-
【PHP】csvファイルへの書き出...
-
PHPでこのコード自体に意味は無...
-
foreachのなかで次のキーを参照...
-
特定の文からメールアドレスの...
-
csvの内容を行単位で削除したい
-
配列をファイルに書き込む方法
-
マッチング処理(1:N)
-
多次元配列のオーソドックスな...
-
別ファイルの構造体の値を読み...
-
外部ファイルの出力
-
curlをPHPで書く方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
掲示板のあらし対策
-
しりとり 無限ループ?
-
file_get_contents()にて文字化け
-
PHP5の外部コマンド実行で、バ...
-
codeigniterのページネーション...
-
サイト名を取得するPHP
-
テキストボックスの日本語をロ...
-
多次元配列等の AND 検索について
-
Zend_Form_Element_Hash
-
XML_Serializerで複数のXMLの扱い
-
「ローマ字 -> ひらがな」へPHP...
-
cakephp2.6でfindを使い合計値...
-
$a[0]='w';$a[1]='r';を1回で
-
要素(文字列)から指定値を検索
-
クラス内での二次元配列への値...
-
順位を付ける時のスコアの重複...
-
pdfファイルの複数添付 引数の型
-
Resource id #3 と表示されま...
おすすめ情報