Я пытаюсь заблокировать (ЗАПИСАТЬ) таблицу в базе данных, и пока она заблокирована, я хочу обновить какое-то поле и затем разблокировать таблицу. Кажется, что когда я блокирую таблицу, соединение, в котором заблокирована таблица, также блокируется. Но смысл блокировки WRITE состоит в том, чтобы отключить другие соединения, но не те, которые выполняют блокировку. Я пробовал использовать mysqli и PDO, но, похоже, ничего из этого не работает.
Я тоже пытался напрямую в phpmyadmin, и он отлично работает.
Я использую PHP 5.6 и расширения mysqli / PDO.
Если я выполню это непосредственно в phpmyadmin, чем это работает:
LOCK TABLE `catalogue_user` WRITE;
UPDATE `catalogue_user` SET update_time = NOW() WHERE catalogue_user_id = 5;
SELECT SLEEP(10);
SELECT NOW();
Мне нужно обновить update_time сразу после блокировки (в то время как другие не могут получить доступ к таблице)
try {
$conn = new PDO("mysql:host=". DB_HOST .";dbname=". DB_DBNAME, DB_USER, DB_PASS);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
var_dump(date("H:i:s"));
$conn->exec("LOCK TABLE ". DB_TABLE_CATALOGUE_USER ." WRITE;");
$conn->exec("UPDATE ". DB_TABLE_CATALOGUE_USER ." SET update_time = '". date("H:i:s") ."' WHERE catalogue_user_id = 5");
sleep(10);
$conn->exec("UNLOCK TABLES;");
var_dump(date("H:i:s"));
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
Я искал повсюду возможные подсказки, но ни один из них не работал ...