Если я понимаю вашу цель: Для строки (ей), где parkingslotid
= 1
- Обновите status
до «В наличии», но только если status
в настоящее время не установлено, это может помочь:
<?php
session_start();
include "includes/connection.php";
$connection->prepare("UPDATE `parkingslot` SET `status`=? WHERE `parkingslotid`=? AND (`status` IS NULL OR `status`=?)");
$connection->bind_param("sis", $status, $parkingslotid, $empty_str);
$status = 'Avail';
$parkingslotid = 1;
$empty_str = '';
$connection->execute();
echo $connection->affected_rows.' rows affected';
$connection->close();
?>
Это экономит часть обработки, не проверяя сначала PHP.
Я предложил бы перенести CRITICAL_SECTION с классом, который обработает инициализацию и неинициализацию критического объекта раздела в его конструкторе и деструкторе. Таким образом, Вы будете ориентированы на многопотоковое исполнение в большинстве случаев. (Необходимо будет удостовериться, что никто не получает доступ к объекту, прежде чем его конструктор завершится, но это относительно легко.)
Существует несколько общих оберток для CRITICAL_SECTION, который можно использовать. CCriticalSection MFC является очевидным выбором, но можно создать собственное также.
В Windows Vista вы можете использовать функции одноразовой инициализации. Использование одноразовой инициализации показывает, как их использовать, чтобы убедиться, что событие инициализируется только один раз.
Уверенный существуют много много путей.
и так далее. Это не отличается от любого другого вопроса попытки создать единственный экземпляр некоторой вещи в Вашем коде.
Можно также использовать класс обертки и объявить глобальный объект того класса. Конструктор глобального объекта будет вызван только однажды при запуске.
Вы можете инициализировать глобальный критический раздел в DllMain
для DLL_PROCESS_ATTACH
( и очистить для DLL_PROCESS_DETACH
).