我正在將某人的舊代碼從 using 更新mysql()為 using PDO。在一個(gè)地方,他們有一些LOCK TABLES命令可以防止兩個(gè)用戶同時(shí)訪問相同的數(shù)據(jù)。運(yùn)行時(shí)LOCK TABLES,PDO拋出“一般錯(cuò)誤:2014 無法執(zhí)行查詢,而其他無緩沖查詢處于活動(dòng)狀態(tài)”。我做了一些測試代碼來消除其他變量。系統(tǒng)在 Ubuntu 18 / PHP 7.2 / MySQL 5.7.27 上運(yùn)行:try { $_DB=new PDO("mysql:host=".DBHOST.";dbname=".DBNAME.";charset=utf8", DBUSER, DBPASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_TIMEOUT => "5", PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_DIRECT_QUERY=>false,PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true )); // This gives the 2014 error. Any queries following this get the 2014 error. // Any queries before this work fine. $_DB->query("LOCK TABLES Inspections WRITE"); $_DB->query("UNLOCK TABLES");}catch (Exception $e) { logError("Error : ".$e->getMessage()); // per @dharman's comment //exit(); throw($e);}我也嘗試在$_DB->beginTransaction之前LOCK TABLES和$_DB->commit之后添加UNLOCK TABLES,但仍然出現(xiàn)相同的錯(cuò)誤。我嘗試了ATTR_EMULATE_PREPARES和 的各種組合MYSQL_ATTR_USE_BUFFERED_QUERY,但似乎沒有任何區(qū)別。
1 回答

30秒到達(dá)戰(zhàn)場
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
你應(yīng)該exec()
改用query()
. exec()
不期望任何返回值,這正是LOCK TABLES
需要的。
$pdo->exec("LOCK TABLES Inspections WRITE");
- 1 回答
- 0 關(guān)注
- 158 瀏覽
添加回答
舉報(bào)
0/150
提交
取消