我正在談論做類似這樣的事情:我們可以在Zend-Db中執行查詢時鎖定表格
LOCK TABLE page WRITE; SELECT * FROM page WHERE col ='value';其中, INSERT INTO page(col1,col2)VALUES('val1',val2);
UNLOCK TABLES;
我正在談論做類似這樣的事情:我們可以在Zend-Db中執行查詢時鎖定表格
LOCK TABLE page WRITE; SELECT * FROM page WHERE col ='value';其中, INSERT INTO page(col1,col2)VALUES('val1',val2);
UNLOCK TABLES;
我沒有看到實際的Zend DB方法鎖定表,但也許只是這樣做:
//Lock Table
$sql = "LOCK TABLE page WRITE";
$db->fetchRow($sql);
//Get your data
$sql = "SELECT * FROM page WHERE col='value'";
$result = $db->fetchAll($sql);
//Make the insert
$data = array('col1' => 'val1', 'col2' => 'val2');
$db->insert('page', $data);
//Unlock tables
$sql = "UNLOCK TABLES";
$db->fetchRow($sql);
可能不是最好的解決方案,這是未經測試。但它可能適用於你。
更新:我遇到了更好的解決方案。使用transactions:
// Start a transaction explicitly.
$db->beginTransaction();
try {
//Get your data
$sql = "SELECT * FROM page WHERE col='value'";
$result = $db->fetchAll($sql);
//Make the insert
$data = array('col1' => 'val1', 'col2' => 'val2');
$db->insert('page', $data);
// If all succeed, commit the transaction and all changes
// are committed at once.
$db->commit();
} catch (Exception $e) {
// If any of the queries failed and threw an exception,
// we want to roll back the whole transaction, reversing
// changes made in the transaction, even those that succeeded.
// Thus all changes are committed together, or none are.
$db->rollBack();
echo $e->getMessage();
}
我最近遇到了同樣的問題,並且事務處理效果很好。絕對要走的路。
我想你會需要使用一個適配器,但我不確定鎖定工程雖然。
$ model-> getAdapter() - > query($ sql,$ bind);
$ this - > _ db-> getConnection() - > exec('LOCK TABLES page');
如果您使用「mysqli」作爲存儲引擎,這將不起作用:「調用未定義的方法mysqli :: exec()」 – Select0r 2013-03-15 10:26:56
Zend_Db交易不要保證鎖!請參閱如何進行適當的單獨交易。
我想我必須這樣做..謝謝你的迴應。 – deepanshuyadav 2009-10-27 11:28:55