пытается вставить NULL, если поле ввода оставлено пустым - PullRequest
0 голосов
/ 10 октября 2011

Я пытаюсь вставить NULL в базу данных mySQL с помощью PHP.

У меня есть:

$myVariable=$_POST[inputfield];        
if(!is_numeric($myVariable) || $myVariable==0){

$myVariable=NULL;
} 

Поле моей базы данных является десятичным, и IS NULL был установлен.Он продолжает возвращаться к 0,00, если ввод оставлен пустым.Как мне установить NULL, если оставить пустым, чтобы я мог вызвать php, если функция NULL?

Редактировать Вызов, если NULL в десятичном виде не является правильным?Это правильно отображает мое сообщение, поэтому, если NULL бесполезен для десятичного числа, я просто оставлю 0,00.Это хакерство?

Структура SQL для тех, кто спросил:

 `myTableField` decimal(10,2) default NULL,

Ответы [ 4 ]

0 голосов
/ 10 октября 2011

вы можете фильтровать данные поля в самом 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);
0 голосов
/ 10 октября 2011

Если вы составляете оператор 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) . "'";
}
0 голосов
/ 10 октября 2011

try:

$myVariable="NULL";

.
если ваш код:

$val=NULL;
mysql_query("SET @v=$val");

MySQL получил строку:

SET @v=0;

это похоже на использование:

echo "SET @v=$val";
0 голосов
/ 10 октября 2011

Попробуйте на стороне SQL:

$sql = "INSERT INTO `table` (`field1`) VALUES (IF($myVariable == 0, NULL, $myVariable))";
...