Zend Framework Zend_Db でハマる

公開日:  最終更新日:2013/11/25

PHP標準フレームワークとの呼び声も高いZend Framework(以下zf)ですが、
Zend_Db ではまってしまいました。

さて、zfはコンポーネント間の連携が疎になっているそうで、それぞれ単独でも使えるというのが売りの一つだったりします。
そういう訳で、zf標準のMVCモデルを使ってなかったりするので、私の場合、本質から離れた使い方になっているようです。

でも、こっちにもいろいろ事情があるのです、HTMLの作成にはビジュアルツールを使いたいですしね。
cssで外観をいぢるのに、URLにスラッシュでパラメータをつけていかれるのは迷惑なのです。
MVCのVの部分では既にテンプレートエンジンを使っているので、Zend_Viewは使ってられないのです。

さてさて、そんな私でもzfはやはり、福音をもたらしてくれるツールに思われます。
いや、まだそれほどまで使い込んでないですけど...

さて、本題のZend_Db です。

こいつがまた、便利そうなのは伝わってくるのですが、具体的な使い方があんまり見当たりません。
本家のマニュアル(リファレンスガイド)も、いまいち使えません。
apiドキュメントというやつも、わけがわかりません。

なんで、php.netみたいにならないんでしょうか?
開発してるやつだって、ここを参考にして作ってるんだろうに、全く...
PHPの本家と言える会社がが開発してる割には、アレなマニュアル環境に辟易としながら
Zend_Dbの使用法を学ぶつもりだったのですが、さて、ここでわからない事が

どうすれば、MySQLのテーブルロックできるんですか??

ネット上にはこれに関する記述(日本語)はほぼ皆無。
書籍にも、載っていません。

くそっ、どうなってる?ロックぐらい使うでしょ???
それとも、ロックする人はMySQLを選ばないんですか?
行ロックのできるPosgresとか、Oracleとか使うんですか?
あるいは、MySQLでもInnoDBで使えって事?
いや、そんな大袈裟な事にDB使うんじゃないですよ。
ちょっとだけロックしたいだけですよ、あるでしょそういう事。
無いの?ウソでしょ?

さてさて、PDOの場合、MySQLでテーブルロックが出来ることは確認済みです。
じゃ、いけるんじゃないのか?Zend_Dbだって、PDO使って実現してるんでしょ?(PDOのアダプタ使った場合) 

さぁ困った。
マニュアルみても書いてません。

仕方がないので、ソース見ることにしました。
眺めてみて...うーん、いけそうな気がします。


$parameters=array(/*適当なパラメータの配列*/);
$table = "テーブル名";

$db = Zend_Db::factory('Pdo_Mysql',$parameters);

$db->exec("LOCK TABLES $table WRITE");
/*なんか、処理*/
$db->exec("UNLOCK TABLES");

いやぁ、これじゃ例外がthrowされるような気もします。
うーん
やっぱ、これかな?


$parameters=array(/*適当なパラメータの配列*/);
$table = "テーブル名";

$db = Zend_Db::factory('Pdo_Mysql',$parameters);

$db->getConnection()->exec("LOCK TABLES $table WRITE");
/*なんか、処理*/
$db->getConnection()->exec("UNLOCK TABLES");

 
これで、いけるかも? いけないかも(笑)

いや、試してないのでわかりません。
試せばいいのですが、面倒なのでしません(をいをい)
後々、必要になればします。
今回は、覚書って事で。

しかし、これでロックできても、Zend_Dbの仕様が変わったら動かなくなるな。
うーん、
テーブルロック用の関数とか、標準で作っておいて欲しいです。
for update とかは出来るようになってるくせに。

いけず。

PAGE TOP ↑