Я пытаюсь вставить NULL в базу данных mySQL с помощью PHP.
У меня есть:
$myVariable=$_POST[inputfield]; if(!is_numeric($myVariable) || $myVariable==0){ $myVariable=NULL; }
Поле моей базы данных является десятичным, и установлено значение NULL. Он продолжает возвращаться к 0,00, если ввод остается пустым. Как установить NULL, если оставить пустым, поэтому я могу вызвать функцию php if NULL?
Изменить вызов, если NULL в десятичном формате неверен?
<? if ($debit==NULL || $debit=="0.00") {echo 'Awaiting Cost';} elseif ($debit != NULL || $debit!="0.00") { echo "£$debit";}?>
Это отображает мое сообщение правильно, поэтому, если NULL бесполезен для десятичной, я просто оставлю 0.00. Это хакки?
Структура SQL для тех, кто спросил:
`myTableField` decimal(10,2) default NULL,
Если вы составляете инструкцию SQL, добавляя значение переменной $myVariable
, вы должны посмотреть, является ли она NULL
или нет, и соответствующим образом изменить инструкцию SQL.
Например, если ваш код выглядит примерно так:
$sql .= "myVariable = '" . mysql_real_escape_string($myVariable) . "'";
то вы должны изменить его на что-то вроде:
if (is_null($myVariable)) { $sql .= "myVariable = NULL"; } else { $sql .= "myVariable = '" . mysql_real_escape_string($myVariable) . "'"; }
Попробуйте на стороне SQL:
$sql = "INSERT INTO `table` (`field1`) VALUES (IF($myVariable == 0, NULL, $myVariable))";
пытаться:
$myVariable="NULL";
,
если ваш код:
$val=NULL; mysql_query("SET @v=$val");
MySQL получил строку:
SET @v=0;
это похоже на использование:
echo "SET @v=$val";
вы можете фильтровать данные поля в самой MySQL, используя TRIGGER:
CREATE TRIGGER table1_update BEFORE UPDATE ON table1 FOR EACH ROW SET NEW.num=IF(NEW.num=0 ,NULL,NEW.num), NEW.txt=IF(NEW.txt="",NULL,NEW.txt); CREATE TRIGGER table1_create BEFORE INSERT ON table1 FOR EACH ROW SET NEW.num=IF(NEW.num=0 ,NULL,NEW.num), NEW.txt=IF(NEW.txt="",NULL,NEW.txt);