データベースのアクセスについて。

データベースのアクセスについて。

por 林 達也 -
Número de respostas: 3

フォーラムの未読の管理ではお世話になりました。

現在Moodle内で使われているデータベースの内容を表示させようと思っているのですが

データベースのアクセスをするさいにどうしたらいいのか?と悩んでいます。

当初CFGを読み込んで処理を記述していたのですが、Moodleの開発者ドキュメント等を読むと

dmllib.phpやddllib.phpを使えとありました。

そこで、get_recordset_sqlを使ってレコードを取得したのですが

PEAR::DBモジュールだと思ってPEAR::DBモジュールで操作を試みたのですがうまくいきません。

データベースの操作等はどのようにすればいいんでしょうか?

お手数ですがお暇な時にでもよろしくお願いいたします。

Em resposta a '林 達也'

Re: データベースのアクセスについて。

por Tatsuya Shirai -
データベースの内容を表示する目的によって手段が事なります。

(1) データベースの中身や構造を手作業で見たい/修正したい
(2) データベース内のデータに対してプログラム(PHP)からアクセスして見たり/修正したい

(1) ならばSQLの命令をコマンドラインで入力して直接のアクセスを行う方法と、phpMyAdmin(名称は不正確)などのWebブラウザ経由でアクセスする方法があります。多分、これらについてはご存知だとは思いましたが、念の為に補足しました。

多分、本題は(2)ですね。
Moodle2.0からはプログラムコード中からデータベースのレコードにアクセスする方法が変わってしまいますが、とりあえず現状のMoodle1.9でのアクセス方法は、林さんがご覧になったmoodleのドキュメントにあったように、Moodleのライブラリを介して非常に簡単に利用できます。function get_record()やget_records()やその近辺のコードをご覧ください。関連のあるディスカッションを以下にひとつ示しますので参考にして下さい。
http://moodle.org/mod/forum/discuss.php?d=118800#p521418
Nota máxima:  お役立ち度: ★★★★★★★ (1)
Em resposta a 'Tatsuya Shirai'

Re: データベースのアクセスについて。

por Tatsuya Shirai -

 出勤しましたので,もう少し詳しい情報を追加します.

 条件に合致するレコードの内容を一つだけ取得するならばfunction get_record(),複数取得するならばfunction get_records()が手軽です.

  • function get_record($table, $field1, $value1, $field2='', $value2='', $field3='', $value3='', $fields='*')
  • function get_records($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='')

$tableには検索したDBのテーブル名を指定します.mdl_などの接頭語は省略,たとえば'course'を指定したら'mdl_course'が検索対象になります.get_record()の場合は$field1,2,3, $value1,2,3はそれぞれペアで,field1, value1が必須です.こんな感じで使います.

        if (!$course = get_record('course', 'id', $course)) {
            return false; // invalid course id
        }

mdl_courseのテーブルの中で,idが$courseと一致するレコードを一つ(しか存在しませんね)$courseにオブジェクトの形式で取得できます.mdl_courseの全てのフィールドが含まれます.もしidの値を参照したいのであれば$course->id,短縮名が参照したいのであれば$course->shortnameでフィールドの値を取得できます.$field2 == $value2, $field3 == $value3のAND条件を追加して条件を狭めることもできます.最後の引数$filedsはSELECTしたいフィールドを制限したい場合に指定します.デフォルトでは'*'ですね.

function get_records()の戻り値は配列です.こちらは検索の条件が一組のみですね.

 既に存在するレコードを更新したい場合は,function update_record(),新たにレコードを追加したい場合はfunction insert_record(),削除したい場合はfunction delete_records()など.
 もう少し細かい制御を行いたい場合はfunction get_reord_sql()などを使用する(←これは詳しく知りません)のだと思います.

 まずは,lib/dmlib.phpを見て下さい.それと本体のソース中で上記function get_record()などがどのように使われているのかを参考にすれば挙動がある程度,理解できるでしょう.

#PEARではありません.

Em resposta a '林 達也'

Re: データベースのアクセスについて。

por Tatsuya Shirai -
 なお,内容がMoodleのコードに関わる内容ですので,近日中に”Moodle開発者フォーラム”に本ディスカッショントピックを移動します.