Zend_Dbで生SQLを使う

こんにちは、バズー株式会社、開発チームリーダーの清水です。

バズーでは、アプリケーションプラットフォームとして、PHPZend Framework を全面的に採用しています。データベースのORマッパーとして標準コンポーネントの Zend_Db を使っているのですが、LOCK TABLES をかけようとして「SQLSTATE[HY000]: General error: 2030 This command is not supported in the prepared statement protocol yett」というエラーに遭遇してしまいました。

■NGだったコード


$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$db->query("LOCK TABLES xxx WRITE;");

Zend Framework を調査した結果、PDO を直接つかって生 SQL を発行する方法を思いつきました。

■OKだったコード


$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$db->getConnection()->exec("LOCK TABLES xxx WRITE;");

getConnection() で PDO オブジェクトが返ってくるので、その exec メソッドを使います。ただし、この技は PDO でしか使えないのでご注意ください(DB2ORACLE、Mysqli には使えません)。