Имам незадължителен вход, осигурен като стойност „тип“. Опитвам се да попреча на оператора да актуализира типа, ако е нулеви данни и да продължа да актуализирам стойността на оборудването.
Изкуших се да създам отделни изрази за подготовка, зависещи от PHP проверка на null, но след това открих SQL ISNULL()
. Не съм го използвал преди и не съм сигурен как да го използвам в подготовка, освен ако няма по-добър начин за постигане на това?
PHP:
$update = $db -> prepare("UPDATE room
SET type = ISNULL(@:type,:type), equipment = :equipment
WHERE room_id = :room_id");
$update -> bindParam(":room_id", $room_id);
$update -> bindParam(":type", $data['type']);
$update -> bindParam(":equipment", $equipmentList);
$update -> execute();
Получавам „SQLSTATE[42000]: Синтактична грешка или нарушение на достъпа: 1582“ при опит за горното.
АКТУАЛИЗАЦИЯ:
UPDATE room
SET type = IFNULL(:type, type), equipment = :equipment
WHERE room_id = :room_id
Добре, този правилен синтаксис коригира грешки, благодарение на eggyal! Проблемът сега е, че null :type
стойностите се актуализират и базата данни valuetype
(която е enum) не се използва вместо null. Проверих два пъти в php преди SQL, че стойностите :type са null.
Защо IFNULL
все още връща нула?