1

私は誰かの古い古いコードを使用から使用に更新mysql()してPDOいます。ある場所にはLOCK TABLES、2 人のユーザーが同時に同じデータにアクセスするのを防ぐコマンドがいくつかあります。を実行するLOCK TABLESと、PDO「一般エラー: 2014 他のバッファリングされていないクエリがアクティブな間はクエリを実行できません」がスローされます。

他の変数を排除するためにいくつかのテスト コードを作成しました。システムは Ubuntu 18 / PHP 7.2 / MySQL 5.7.27 で実行されます。

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->commitUNLOCK TABLESが、それでも同じエラーが発生します。

ATTR_EMULATE_PREPARESと のさまざまな組み合わせを試しMYSQL_ATTR_USE_BUFFERED_QUERYましたが、違いはないようです。

4

1 に答える 1