2013-06-30 71 views
2

在這個腳本我有:PHP PDO鎖表

$db = new PDO('mysql:host=localhost; dbname=name; charset=utf8', 'user', 'pass'); 
$db -> exec('LOCK TABLES `table1`, `table2` WRITE'); 
// Do some stuff here 
$db -> exec('UNLOCK TABLES'); 

的問題是,似乎是表不被鎖定。腳本的多個實例同時執行。

// Do something here 

代碼仍然無法像原子LOCK TABLES語句所預期的那樣做東西。

我在做什麼錯?

另外我注意到,儘管我沒有明確鎖定我使用的其他表格(例如table3),但我仍然可以讀取/寫入它們。根據mySQL手冊,這應該是不可能的。

編輯:

// Do some stuff here代碼實例幾類,做數據庫的工作,但共享相同$db PDO連接。

這應該不是問題的原因,因爲我理解它,完全是因爲它們共享相同的連接。鎖表語句應該由它們「繼承」。

+0

您如何知道腳本在同一時間執行多次? –

+0

對於初學者來說,它被設計爲同時執行多次。 之後,我可以看到數據庫中的數據是錯誤的:) 如果沒有執行腳本的多個實例並且鎖定表工作,那麼情況就不會如此:) – jimmy

+0

您的用戶是否有權限鎖表? – mc10

回答

0

您的語法稍微偏離。在每個表名之後添加WRITE

$db -> exec('LOCK TABLES `table1` WRITE, `table2` WRITE');