2013-10-15 63 views
1

我想在我的PHP腳本運行此命令用來鎖住我的表:PHP PDO未鎖定的MySQL表(S)

$PDO->exec('LOCK TABLES `tblclients` WRITE'); 

當我運行該腳本,我試圖從SELECT內部的表MySQL Workbench只是爲了驗證表被實際鎖定。 SELECT運行平穩,這告訴我表從未實際上被鎖定。我對嗎?

如果我只是在MySQL Workbench中運行LOCK TABLES tblclients WRITE,然後嘗試SELECT,表格確實顯示爲LOCKED並阻止SELECT觸發。

從我的PHP腳本運行該查詢時,它似乎不工作。

在這兩種情況下,我作爲root用戶在本地運行,所以我擁有所有權限。

任何想法?

+0

您確定查詢成功嗎?結果是什麼? PDO是否拋出異常? –

+0

@ExplosionPills查詢'LOCK TABLES tblclients WRITE'沒有失敗。我沒有得到任何錯誤,PDO也不會拋出任何異常。 – FastTrack

+0

exec的返回值是什麼? –

回答

2

MySQL LOCK TABLES是一個每會話操作。如果你運行類似

<?php 
$PDO->exec("LOCK TABLES tblclients WRITE"); 
exit; 
?> 

然後從PDO的MySQL連接立即關閉,鎖定將被釋放。爲了正確地測試,您可以嘗試使用兩個單獨的連接,並選擇一個不鎖定sleep一段時間,以便您可以手動運行查詢。

+0

我的'exec'語句返回'0'因爲某種原因,它似乎失敗了,從來沒有真正鎖定表 – FastTrack

+0

@FastTrack你確定PDO用戶有鎖定授權? –

+0

是的 - 我剛剛跑過'SHOW GRANTS',它返回了'授予所有特權* *'給'root'@'localhost'WITH GRANT OPTION' – FastTrack