あ、みんな忘れてると思うけどここPHPのブログです。
MODX EvolutionにはDBAPIというデータベース接続クラスが用意されています。
が、中を見てみたところ相当がっかりな作りでした。
function delete($from,$where='',$limit=''){
if($where != '') $where = "WHERE {$where}";
これはひどい。
escape()の引数はバラで与えないといけないのに、select()やdelete()のwhere句は文字列をそのまま使うので、呼び出し側でいちいち組み立てないといけません。
こんな危険な作りだったら最初から使わない方が安全ですし、どうせ作るのであればbindValue()くらい実装してくれと。
まあ、いちいち接続を確立しなくても$modx->dbから常に使えるのが利点ですので、危険性を理解した上で使うならいいのではないでしょうか。
getColumn()やprepareDate()のような意味のわからないメソッドがある一方、beginやprepare、bindといった必須機能がないなど、
正直素直にPear::MDB2でも使ってくれと言わざるをえない。
MODX EvolutionにはDBAPIというデータベース接続クラスが用意されています。
が、中を見てみたところ相当がっかりな作りでした。
function delete($from,$where='',$limit=''){
if($where != '') $where = "WHERE {$where}";
これはひどい。
escape()の引数はバラで与えないといけないのに、select()やdelete()のwhere句は文字列をそのまま使うので、呼び出し側でいちいち組み立てないといけません。
こんな危険な作りだったら最初から使わない方が安全ですし、どうせ作るのであればbindValue()くらい実装してくれと。
まあ、いちいち接続を確立しなくても$modx->dbから常に使えるのが利点ですので、危険性を理解した上で使うならいいのではないでしょうか。
| DBAPI ( [ $host='',$dbase='', $uid='',$pwd='',$prefix=NULL,$charset='',$connection_method='SET CHARACTER SET' ] ) | |
|---|---|
|
コンストラクタ 接続自体は行わないので別途connect()を呼ぶ必要がある |
|
| 引数 | 解説 |
| $host |
ホスト名。 未指定の場合global $database_server |
| $dbase |
データベース名。 未指定の場合global $dbase |
| $uid |
データベースユーザ名。 未指定の場合global $database_user |
| $pwd |
データベースユーザのパスワード。 未指定の場合global $database_password |
| $prefix |
テーブル名の接頭辞。 未指定の場合global $table_prefix |
| $charset |
MySQLの文字コード。 未指定の場合global $database_connection_charset。 下記$connection_methodおよびmysql_set_charset()で使用する。 |
| $connection_method |
'SET CHARACTER SET' . $charsetコマンド。 global $database_connection_methodが優先。 mysql_set_charset()が存在する場合はそちらも実行するが、$connection_methodも必ず実行されてしまう。 |
| connect ( [ $host = '', $dbase = '', $uid = '', $pwd = '', $persist = 0 ] ) | |
|---|---|
| データベースサーバに接続する | |
| 引数 | 解説 |
| $host |
ホスト名。 未指定の場合コンストラクタで設定した値。 |
| $dbase |
データベース名。 未指定の場合コンストラクタで設定した値。 |
| $uid |
データベースユーザ名。 未指定の場合コンストラクタで設定した値。 |
| $pwd |
データベースユーザのパスワード。 未指定の場合コンストラクタで設定した値。 |
| $persist | 0以外の場合mysql_pconnect()で接続する。 |
| disconnect () | |
|---|---|
| データベースサーバへの接続を閉じる |
| escape ( $s ) | |
|---|---|
| 文字列をエスケープする | |
| 引数 | 解説 |
| $s | 引数の文字列をエスケープして返す |
| query ( $sql ) | |
|---|---|
| 任意のSQLを実行する | |
| 引数 | 解説 |
| $sql | 引数のSQLをmysql_query()した結果を返す。 |
| delete ( $from, [ $where='',$limit='' ] ) | |
|---|---|
| deleteを実行する | |
| 引数 | 解説 |
| $from | テーブル名。 |
| $where |
where句。 未指定の場合全部消える。 |
| $limit | limit句。 |
| select ( [ $fields = "*", $from = '', $where = '', $orderby = '', $limit = '' ] ) | |
|---|---|
| selectを実行する | |
| 引数 | 解説 |
| $fields | 取得するカラム名を文字列で指定。 |
| $from | テーブル名。 |
| $where |
where句。 文字列で指定。 |
| $orderby |
oder by句。 文字列で指定。 |
| $limit |
limit句。 文字列で指定。 |
| update ( $fields, $table, [ $where = '' ] ) | |
|---|---|
| updateを実行する | |
| 引数 | 解説 |
| $fields |
アップデートする内容。 文字列の場合UPDATE文の後にそのまま入る。 配列の場合'key'=>'value'に展開される。 |
| $table | テーブル名。 |
| $where |
where句。 文字列で指定。 |
| insert ( $fields, $intotable, [ $fromfields = "*", $fromtable = '', $where = '', $limit = '' ] ) | |
|---|---|
| insertを実行し、mysql_insert_id()を返す。 | |
| 引数 | 解説 |
| $fields |
インサートする内容。 文字列の場合UPDATE文の後にそのまま入る。 配列の場合'key'と'value'に展開される。 |
| $intotable | insertするテーブル名。 |
| $fromfields | INSERT SELECTを使用する場合のFROMカラムを文字列で指定。 |
| $fromtable |
INSERT SELECTを使用する場合のFROMテーブル。 指定するとINSERT SELECTになる。 |
| $where | INSERT SELECTを使用する場合のwhere句を文字列で指定。 |
| $limit | INSERT SELECTを使用する場合のlimit句を文字列で指定。 |
| getInsertId ( [ $conn=NULL ] ) | |
|---|---|
| mysql_insert_id()を返す。 | |
| 引数 | 解説 |
| $conn | 指定すると該当リソースのmysql_insert_id()を返す。 |
| getAffectedRows ( [ $conn=NULL ] ) | |
|---|---|
| mysql_affected_rows()を返す。 | |
| 引数 | 解説 |
| $conn | 指定すると該当リソースのmysql_affected_rows()を返す。 |
| getLastError ( [ $conn=NULL ] ) | |
|---|---|
| mysql_error()を返す。 | |
| 引数 | 解説 |
| $conn | 指定すると該当リソースのmysql_error()を返す。 |
| getLastError ( $ds ) | |
|---|---|
| 引数リソースの行数を返す。 | |
| 引数 | 解説 |
| $ds | 該当リソースのmysql_num_rows()を返す。 |
| getRow ( $ds, [ $mode = 'assoc' ] ) | |
|---|---|
| 引数リソースから1行取得して返す。 | |
| 引数 | 解説 |
| $ds | 該当リソースを処理する。 |
| $mode |
フェッチモード。 'assoc','num','both'から指定。デフォルト'assoc' |
| getColumn ( $name, $dsq ) | |
|---|---|
| ひとつの列を取得して返す。 | |
| 引数 | 解説 |
| $name | 指定した列を返す。 |
| $dsq |
リソースであればそのリソースを処理。 文字列であればSQLとして実行し、その結果に対して処理。 |
| 例 |
$modx->db->getColumn('id', 'SELECT * FROM table');とすると、 SQLを実行してid列のみを拾って連想配列にして返す。 正直使いどころがわからん。 |
| getColumnNames ( $dsq ) | |
|---|---|
| リソースに含まれる列名を取得 | |
| 引数 | 解説 |
| $dsq |
リソースであればそのリソースを処理。 文字列であればSQLとして実行し、その結果に対して処理。 |
| 例 | $modx->db->getColumnNames('SELECT * FROM table');とすると、 テーブルtableの列名のリストが返る。 |
| getValue ( $dsq ) | |
|---|---|
| リソースの最初の列の最初の行を取得 | |
| 引数 | 解説 |
| $dsq |
リソースであればそのリソースを処理。 文字列であればSQLとして実行し、その結果に対して処理。 |
| 例 |
$modx->db->getValue('SELECT id,name FROM table');とすると、1行目のidが返る。 繰り返し呼ぶと次の行のidが返る。かなり存在意義不明。 |
| getXML ( $dsq ) | |
|---|---|
| リソースの取得結果をXMLにして返す | |
| 引数 | 解説 |
| $dsq |
リソースであればそのリソースを処理。 文字列であればSQLとして実行し、その結果に対して処理。 何故DB接続クラスに置いているのか。 |
| getTableMetaData ( $table ) | |
|---|---|
| テーブルのメタデータを返す。 | |
| 引数 | 解説 |
| $table | テーブルに対して'SHOW METADATA'を実行し、返り値を連想配列で返す。 |
| prepareDate ( $timestamp, [ $fieldType = 'DATETIME' ] ) | |
|---|---|
| タイムスタンプを日時形式にして返す | |
| 引数 | 解説 |
| $timestamp | UNIXタイムスタンプ |
| $fieldType |
タイムスタンプをdate()した結果を返す。 フォーマットは以下の四種類だけ。 'DATE'=>'Y-m-d'、'TIME'=>'H:i:s'、'YEAR'=>'Y'、その他=>'Y-m-d H:i:s' |
| getHTMLGrid ( $dsq, $params ) | |
|---|---|
|
DataGridを使用して表を作成する DataGrid::render()した結果を返す。 |
|
| 引数 | 解説 |
| $dsq |
リソースであればそのリソースを処理。 文字列であればSQLとして実行し、その結果に対して処理。 |
| $params |
DataGridで使用するパラメータを配列で指定。 詳細はDataGridを参考にすること。 |
| makeArray ( $rs ) | |
|---|---|
|
引数リソースの全行を取得して返す。 名前が物凄くわかりにくいがfetchAll()。 |
|
| 引数 | 解説 |
| $rs | 処理するリソース。 |
| getVersion () | |
|---|---|
| mysql_get_server_info()を返す。 |
getColumn()やprepareDate()のような意味のわからないメソッドがある一方、beginやprepare、bindといった必須機能がないなど、
正直素直にPear::MDB2でも使ってくれと言わざるをえない。
PR
俺も前々から思ってたわ~
おかしいと思ってたわ~