忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/03/26 08:29 |
PHP5.3 MODX Evolution 1.0.6J DBAPIの全メソッド紹介
あ、みんな忘れてると思うけどここPHPのブログです。


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


2012/04/13 23:59 | Comments(2) | PHP

コメント

あ、あ~なるほど、
俺も前々から思ってたわ~
おかしいと思ってたわ~
posted by 名無しじゃなきゃダメなのぉ! at 2012/04/14 08:03 [ コメントを修正する ]
なるほどー分かりやすくて助かるなー(棒)
posted by 名無しじゃなきゃダメなのぉ! at 2012/04/14 15:45 [ コメントを修正する ]

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft1.2.4 MOD紹介 BicBiomeCraft ver4.0 バイオームを大量に追加 | HOME | Minecraft1.1 MOD紹介 ThaumCraft 1.2.6 その5 るつぼのパワーアップ>>
忍者ブログ[PR]