Portál AbcLinuxu, 8. května 2025 14:15
DELIMITER $$ CREATE TRIGGER tr_tabulka_update BEFORE UPDATE ON tabulka FOR EACH ROW BEGIN IF (NEW.enabled = 1 OR NEW.enabled LIKE 'true' OR NEW.enabled LIKE 't') THEN SET NEW.enabled = 1; ELSE SET NEW.enabled = 0; END IF; END;$$ DELIMITER ;ale nefunguje a píše warning, takže se zdá že mysql kontroluje hodnotu "enabled" ještě před spuštěním triggeru a do triggeru už se dostane nějak ořezaná...
postgres=# select true::int, false::int; int4 | int4 ------+------ 1 | 0 (1 row)Případně, pokud máte starší verzi pg
postgres=# CREATE OR REPLACE FUNCTION to_int(boolean) RETURNS int AS $$ SELECT CASE WHEN $1 THEN 1 ELSE 0 END $$ LANGUAGE sql; postgres=# SELECT to_int(true), to_int(false); to_int | to_int --------+-------- 1 | 0 (1 row)
$value = mysqli_real_escape_string($value); $sql="…mysql_bool_field = CASE '$value' WHEN '0' THEN 0 WHEN 'f' THEN 0 ELSE 1 END…"
SELECT CASE WHEN sloupec THEN 1 ELSE 0 END, ...To je naprosto podle standardu.
bool
jak tinyint(1)
(což jste i napsal) a hodnotu 0 považuje za false
a cokoliv jiného za true
(dobrým zvykem je vkládat jedničku, pokud tedy typ bool používáte)."`bool_field`=CASE WHEN '$value'='f' THEN 0 ELSE 1 END CASE"
).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.