Проблема не в синтаксисе вашего кода, а в том, как вы пытаетесь его использовать.
непосредственно перед отображением записи для редактирования. Я блокирую запись с помощью следующего кода
Исходя из этого, я предполагаю, что вы выбираете и «блокируете» строку, затем отображаете эту страницу редактирования для своего пользователя, затем, когда они отправляют изменения, она сохраняет и «разблокирует» таблицу.Здесь кроется основная проблема.Когда ваша страница загружена, PHP завершает работу и закрывает соединение MySQL.Когда это происходит, все блокировки немедленно снимаются.Вот почему консоль ведет себя иначе, чем ваш PHP.Эквивалентом в консоли будет выход из программы.
Вы не можете заблокировать строки таблицы для редактирования на длительный период.Это не их дизайн.Если вы хотите заблокировать запись для редактирования, вам нужно отследить эти блокировки в другой таблице.Создайте новую таблицу с именем «edit_locks» и сохраните заблокированный идентификатор записи, редактирование идентификатора пользователя и время его блокировки.Если вы хотите открыть запись для редактирования, заблокируйте всю таблицу edit_locks и сделайте запрос, чтобы узнать, заблокирована ли запись кем-то другим.Если это не так, вставьте запись о блокировке, если она есть, затем отобразите заблокированную ошибку.Когда пользователь сохраняет или отменяет, удалите запись блокировки из edit_locks.Если вы хотите упростить задачу, просто заблокируйте эту таблицу в любое время, когда ваша программа захочет ее использовать.Это поможет вам избежать состояния гонки.
Существует еще один сценарий, который может вызвать проблему.Если пользователь открывает запись для редактирования, а затем закрывает браузер без сохранения или отмены, блокировка редактирования останется там навсегда.Вот почему я сказал хранить время, когда он был заблокирован.Сам редактор должен делать AJAX-вызов каждые 2 минуты или около того, чтобы сказать: «Мне все еще нужен замок!».Когда программа PHP получает этот запрос «relock», она должна выполнить поиск блокировки, а затем обновить текущую метку времени.Таким образом, отметка времени на блокировке всегда обновляется в течение 2 минут.Вам также необходимо создать другую программу для удаления старых устаревших блокировок.Это должно выполняться в работе cron каждые несколько минут.Он должен найти все блокировки с отметкой времени старше 5 минут и удалить их.Если временная метка старше этой, то, очевидно, редактор был близок к тому, как или временная метка была бы обновлена в течение 2 минут.
Как упоминали некоторые другие, вы должны попытаться использовать MySQLi .Он расшифровывается как «MySQL Improved» и является заменой старого интерфейса.