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連接。
這應該不是問題的原因,因爲我理解它,完全是因爲它們共享相同的連接。鎖表語句應該由它們「繼承」。
您如何知道腳本在同一時間執行多次? –
對於初學者來說,它被設計爲同時執行多次。 之後,我可以看到數據庫中的數據是錯誤的:) 如果沒有執行腳本的多個實例並且鎖定表工作,那麼情況就不會如此:) – jimmy
您的用戶是否有權限鎖表? – mc10