あ、みんな忘れてると思うけどここ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
俺も前々から思ってたわ~
おかしいと思ってたわ~