使用環境ですが、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で質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- PHP php エラー 2 2022/10/23 16:43
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP ECCUBE4のページ管理でPHPを実行させたい 1 2023/04/06 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
pukiwikiのユーザ認証の設定で...
-
usortで3つの項目を昇順・降順...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
Resource id #3 と表示されま...
-
エラーの原因について
-
行数が30万件ほどあるCSVから、...
-
配列をループでたくさん宣言し...
-
配列の何番目かを出力したい
-
String だと「 ByRef引数の型が...
-
3つの連想配列を交互に代入し...
-
スカラーのベクトル微分
-
php で1から100までの素数の表...
-
PHPのmin関数、「1」以上の数値...
-
プルダウンメニューでCSVデータ...
-
チェックボックスが複数選択で...
-
pythonのnumpyでの繰り返しでの...
-
C言語 最大値と最小値を求めて...
-
postgresql関数をつかったレコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
QuickForm createElement での ...
-
phpのin_array()でわからない事...
-
バッチでFTPコマンド
-
NGワード設定もしくはテキス...
-
2次元配列の値の受け渡しについ...
-
file_get_contents()にて文字化け
-
Zend_Form_Element_Hash
-
日付、時間の2段階でソート
-
サイト名を取得するPHP
-
codeigniterのページネーション...
-
しりとり 無限ループ?
-
phpとmysqlで「あいまい検索」...
-
listへのappendが出来ない件
-
テキストボックスの日本語をロ...
-
usortで3つの項目を昇順・降順...
-
1~100の数字の9の倍数だけ同じ...
-
pukiwikiのユーザ認証の設定で...
-
cakephp2.6でfindを使い合計値...
-
PHP5の外部コマンド実行で、バ...
おすすめ情報