Twitter ログイン機能についてのお知らせ
2016年1月28日現在、Twitter公式の仕様変更によりTwitterログイン機能をご利用いただけません。
次回リリースのバージョンで対応させていただく予定です。ご迷惑をおかけして恐縮ですが、ご理解のほどよろしくお願い申し上げます。
2016年1月28日現在、Twitter公式の仕様変更によりTwitterログイン機能をご利用いただけません。
次回リリースのバージョンで対応させていただく予定です。ご迷惑をおかけして恐縮ですが、ご理解のほどよろしくお願い申し上げます。
DBクラスは、a-blog cmsで使用しているデータベースへの接続を支援するクラスです。
// DBクラス DB = DB::singleton(dsn());
dsn関数は、a-blog cmsの組み込み関数で、config.server.phpに保存されているデータベース情報を、連想配列で返します。以降のサンプルで紹介されている箇所以外で、使用することはほとんどありません。
基本的なクエリーの発行と、結果を全件取得するサンプルを下記に示します。
$DB = DB::singleton(dsn()); $q = '`SELECT * FROM `acms_entry` LIMIT 0, 10'; /** * query * @param string $query * @param string $mode * @return mixed $response */ // クエリーの結果を全件取得する $all = $DB->query($q, 'all');
queryメソッドは、複数のモードを持ちます。それぞれのモードで、返り値が異なります。
結果を多次元配列として、全行取得します。
$q = '`SELECT * FROM `acms_entry` LIMIT 0, 10'; $all = $DB->query($q, 'all'); var_dump($all); /* dumpの結果 array(10)( [0] => array(21)( 'entry_id' => 1, 'entry_title' => 'サンプルレコード', 'entry_code' => 'entry-1.html', ... ), [1] => array(21)( 'entry_id' => 2, 'entry_title' => 'サンプルレコード2', 'entry_code' => 'entry-2.html', ... ), [2] => array(21)( 'entry_id' => 3, 'entry_title' => 'サンプルレコード3', 'entry_code' => 'entry-3.html', ... ), ... ); */
結果から1行のみ取得します。結果が複数行だった場合は、先頭の1行を連想配列で返します。
$q = '`SELECT * FROM `acms_entry` WHERE `entry_id` = 1'; $row = $DB->query($q, 'row'); var_dump($row); /* dumpの結果 array(21)( 'entry_id' => 1, 'entry_title' => 'サンプルレコード', 'entry_code' => 'entry-1.html', ... ) */
結果から1つの値を取得します。結果が複数列をもつ場合は、先頭列の値を取得します。また、結果が複数行であった場合は、先頭の1行が対象行となります。
$q = '`SELECT `entry_title` FROM `acms_entry` WHERE `entry_id` = 1'; $one = $DB->query($q, 'one'); var_dump($row); /* dumpの結果 string "サンプルレコード" */
結果を1行ずつ取得できるように、クエリーの結果をDBインスタンス内で保持します。保持された結果は、fetchメソッドで1行ずつ取得します。
fetchメソッドの返り値はrowモードと同じ挙動を示しますが、取得すべき結果が無くなった場合は、falseを返します。
$q = '`SELECT * FROM `acms_entry` LIMIT 0, 10'; $DB->query($q, 'fetch'); /** * fetch * @param string $query * @return array $row */ while ( $row = $DB->fetch($q) ) { echo $row['entry_title']."\r\n"; } /* echo の結果 サンプルレコード サンプルレコード2 サンプルレコード3 ... .. . */
クエリーの成否のみをbooleanで返します。INSERT、UPDATE、DELETEなどの発行時に使用します。
$q = 'INSERT INTO acms_entry (col1, col2, col3....) VALUES(val1, val2, val3...);' $res = $DB->query($q, 'exec'); if ( $res == true ) { // success } else { // fail }
SQLクラスは、a-blog cmsで使用しているSQL文の作成を支援するクラスです。DBクラスとあわせて使用します。今回はSelect文を発行するケースで順にサンプルを紹介します。
// Templateクラス $Tpl = new Template($this->tpl, new ACMS_Corrector()); // DBクラス @dsn()はconfig.server.php で定義されたデータベース情報を返します $DB = DB::singleton(dsn()); // SQLクラス $SQL = SQL::newSelect('entry'); // 対象の列を設定 $SQL->addSelect('entry_title'); $SQL->addSelect('entry_datetime'); // SQLを組み立てる $q = $SQL->get(dsn()); // クエリーを実行して結果を取得 $all = $DB->query($q, 'all'); // 取得したデータをentry:loopとしてテンプレートに追加 foreach ( $all as $row ) { $Tpl->add('entry:loop', $row); } return $Tpl->get();
$SQL = SQL::newSelect('entry'); $SQL->addSelect('entry_title'); $SQL->addSelect('entry_datetime'); // エントリーの日付で降順に並び替える $SQL->setOrder('entry_datetime', 'DESC'); // 取得数を10までに制限する $SQL->setLimit(10); $q = $SQL->get(dsn()); $all = $DB->query($q, 'all'); ?>
$SQL = SQL::newSelect('entry'); // 合計をカウントする ( MAX・MINなど集計関数 ) $SQL->addSelect('*', 'amount', null, 'COUNT'); // カテゴリーIDでグループする $SQL->setGroup('entry_category_id'); $q = $SQL->get(dsn()); $all = $DB->query($q, 'all');
$SQL = SQL::newSelect('entry'); $SQL->setSelect('*'); // 第三引数以降は省略できます $SQL->addWhereOpr('entry_blog_id', 1, '=', 'AND'); $q = $SQL->get(dsn()); $all = $DB->query($q, 'all');
$SQL = SQL::newSelect('entry'); $SQL->setSelect('*'); // entory_category_idが1 $SQL->addWhereOpr('entry_category_id', 1); // または entry_user_idが1 $SQL->addWhereOpr('entry_user_id', 1, '=', 'OR'); $q = $SQL->get(dsn()); $all = $DB->query($q, 'all');
$SQL = SQL::newSelect('entry'); $SQL->setSelect('*'); // draft か close である ( IN ) $SQL->addWhereIn('entry_status_id', array('draft', 'close')); $q = $SQL->get(dsn()); $all = $DB->query($q, 'all');
$keyword = 'hogehoge'; $SQL = SQL::newSelect('comment'); $SQL->addSelect('*'); $SQL->addWhereOpr('CONCAT(comment_title, comment_body, comment_name)', "%$keyword%", 'LIKE'); $q = $SQL->get(dsn()); $all = $DB->query($q, 'all');