2010年5月10日月曜日

concrete5上に同一サーバ内別DBデータ表示を表示。(覚え書き)

concrete5上に、同一サーバ内の別DBからデータをselectして表示させる必要があり、色々試行錯誤が必要だったのでメモです。

1、まず、無料のPHPブロックを使って、普通にMySQL関数で外部DBを読み込ませるとすぐOKになり、一見完璧だったのですが、ページのリロードなどをすると、ADOdbに関するエラーが出て、アウトでした。

2、そこで、本家ドキュメントを見に行き、
http://www.concrete5.org/documentation/developers/system/database-connectivity
にADOdbを使って他のDBにアクセスする方法の概要が出ていたので、コードの変更を行うことにしました。

$db = Loader::db( 'newserver', 'newuser', 'newpassword', 'newdatabase', true);
という感じで、外部DBにアクセス。
$rows=$db->Execute('select * from TestTable');
で実行&格納。

3、http://adodb.sourceforge.net/
にADODBの記述法が書いてあったので、参考にしながら色々やってみました。
 途中、whileの書き方が良くなかったらしく、無限ループに入ってまいりました。。
 PHPブロックのデータが入ったbtNdPhpBlockContentというテーブルに、記述したコードがあったので、そちらを削除して回避しました。。

4、最終的に以下のような感じで、目的のデータを表示できました。
foreach ($rows as $row) {
printf("<p>■「%s」(%s):%s</p> ",$row['title'],$row['date'],$row['content']);
}
5、以下のコードを挿入すると元のDBにアクセスし直す、ということだったので、挿入。(これを入れないと、自分の経験ではループに入ってしまう感じです。。)
// return to the original db session
$db = Loader::db(null, null, null, null, true);
 
 これでlocalサーバ内の別DBからのデータもconcrete5上で表示させることができ、エラーも出なくなって、目的が達成されました。

0 件のコメント:

コメントを投稿