Archive for the ‘ZendFramework’ category

Zend_Db

10月 4th, 2007

ちょこっと便利そうな関数のメモ

例 10.18. 自動インクリメントのキーにおける lastInsertId() の使用法

< ?php
$db->insert('bugs', $data);
//自動インクリメントのカラムで最後に生成された値を返します
$id = $db->lastInsertId();

そのテーブルで自動インクリメントの主キーを定義している場合は、 データを追加した後で lastInsertId() メソッドを使用することができます。このメソッドは、 現在のデータベース接続において最後に自動生成された値を返します。

同じく主キー以外は
$id = $db->lastSequenceId('bugs_id_gen');
で取得できる模様

quote() の返り値には、文字列の両端に区切り文字が追加されていることに注意しましょう。 これは、たとえば mysql_real_escape_string()のようなエスケープ用関数の挙動とは異なります。

トランザクション

< ?php
//トランザクションを明示的に開始します
$db->beginTransaction();
try {
     // いくつかクエリを実行します
     $db->query(...);
    $db->query(...);
    $db->query(...);
    // すべて成功したら、トランザクションをコミットして
     // すべての変更を一度に適用します
     $db->commit();
}
catch (Exception $e) {
    // いずれかのクエリが失敗して例外が発生したら、
     // もし他に成功しているクエリがあったとしても
    // それも含めてすべての処理をロールバックします。
    // すべて適用されるか、ひとつも適用されないかのいずれかです。
    $db->rollBack();
   echo $e->getMessage();
}

Zend_Db_Selectオブジェクト

メソッドを使用して句を追加する例

< ?php
// Zend_Db_Select オブジェクトを作成します
$select = $db->select();
// FROM 句を追加します
$select->from( ...テーブルとカラムを指定します... )
// WHERE 句を追加します
$select->where( ...検索条件を指定します... )
// ORDER BY 句を追加します
$select->order( ...ソート条件を指定します... );

また個々の句に対してメソッドが用意されている。
from()
join()
where()
orWhere()
group()
having()
order()
limit()
limitPage()
distinct()
など

< ?php
// できあがるクエリは、このようになります
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p
//   LIMIT 10, 20
$select = $db->select()
    ->from(array('p' => 'products'), array('product_id', 'product_name'))
    ->limitPage(2, 10);

使いこなせば便利そう・・・使い慣れない間はSQLをそのまま記述したほうが早そう・・・^^;
具体的な使用例は使いながらUPしていくつもり。

Zend_Authを試す

9月 29th, 2007

ZendFremeworkのZend_Authを試す。
PEAR::Authと違い、認証のみの機能となる。
アクセス制御は別のZend_Aclを使う。

なんとなく整理して書くとこんな感じ。

$_connect = $db->_dbConnect(); //DBにコネクト
$authAdapter = new Zend_Auth_Adapter_DbTable($_connect , 'user' , 'username' , 'password');
 
// リクエストパラメータをセット
$authAdapter->setIdentity( $this->getRequest()->getPost('username') );
$authAdapter->setCredential( $this->getRequest()->getPost('password') );
 
// 認証を実行
$result = $authAdapter->authenticate();
if (!$result->isValid()) {
    // 認証失敗の場合はログイン画面へ
  $this->_redirect('/login');
}else{ 
    // 認証情報をセッションに保存
    $data = $authAdapter->getResultRowObject( null , 'password' ) );  //password以外を保存
   $auth = Zend_Auth::getInstance();
   $auth->getStorage()->write($data);
}

認証後のユーザー取得は

$auth = Zend_Auth::getInstance();
$user = $auth->getIdentity();

となる。

慣れない方法なのでわかりにくいなぁ・・。

2010/01 一部修正