2011-11-11 127 views
0

在我的SQL數據庫中,是許多領域是這樣的: 字段類型:文本空:是默認值:NULL設置變量的數據庫值設置爲NULL而不是空字符串

我INSERT看起來是這樣的:

INSERT INTO tbl (col,col,col,...) VALUES ('val','val','val',...) 

現在,我的INSERT語句的值中的那些引號將''(空字符串)插入到數據庫中,當我真正想要的是什麼(NULL)時。

所以,我想

if (isset($_POST['title'])) {$newTitle = mysql_real_escape_string(trim($_POST['title']));} else {$newTitle = NULL;} 

和剛插入 'NULL' - 包含詞NULL的字符串。

我能做些什麼來確保我的NULL值被正確插入?

回答

1

你有什麼是好的,但你需要將它與一份聲明中結合...

// prepare the statement 
    $stmt = $mysqli->prepare("INSERT INTO tbl (title, x,y,z) values (?,?,?,?)"); 

    $stmt->bind_param($newTitle, $x,$y,$z); 

    $x = 'hello, world'; 
// execute prepared statement 
    $stmt->execute(); 

如果x或newTitle爲NULL,它們將在DB中爲NULL

+0

是的,Prepared statement似乎是這裏的解決方案。猜猜我會去了解他們。謝謝! –

1

您可以通過添加一個空不低於行情例嘗試:

INSERT INTO tbl (col,col,col,...) VALUES (NULL,'val','val',...) 

還要確保列,你想有一個純空必須有允許NULL打勾。

+0

列設置爲接受NULL,所以我確信數據庫是好的。 我不希望值始終爲NULL,只有在沒有輸入任何內容的情況下,如此硬編碼NULL值纔不是我的選項。 問題的核心是我試圖避免在我的數據庫中的空字符串。當我的INSERT值被封裝在'(因爲它們應該是每個SQL語法),看起來我留下了''(空字符串)或'NULL'(包含NULL的字符串)。 –

+0

使用PHP,您可以隨心所欲地構建SQL字符串。對於每一列,只需檢查該值並將引號括起來,或者使用NULL來代替。 – Yogu

+0

我認爲我的解決方案是在這個,雖然我不熟悉mysqli和準備好的陳述。看起來我必須找到一種方法來添加'VALUES('val','val',...);動態。 –

0

不要在INSERT INTO中指定字段或提供值。 如果你有3場,F1 F2 F3 你

INSERT INTO tbl (f1, f3) VALUES ('something', 'something') 

然後F2不會被插入並默認爲空。

+0

但我確實希望插入的值,如果已經輸入。否則,我希望它設置爲NULL –

-1

我使用'0'而不是null。當您使用if語句,你可以像

if($row['f2'] == 0){... 

不是空:)運行查詢

+0

這不包括字符串「0」作爲特定列的有效值... – Yogu

+0

你是什麼意思?它是MySQL和PHP的有效字符串。我一直使用0作爲一個字符串。 –

+0

您建議不要將空列設置爲「NULL」,而是設置爲「0」。因此,所有值爲'0'的列將被假定爲空。但是如果用戶真的將'0'指定爲該字段的值,那麼代碼會認爲該列是空的。 – Yogu