我曾經使用標準的mysql_connect(),mysql_query()等聲明來從PHP中做MySQL的東西。最近我一直在使用美妙的MDB2課程。與此同時,我使用了準備好的語句,所以我不必擔心會逃避我的輸入和SQL注入攻擊。MySQL中非空列中的空字符串?
但是,我遇到了一個問題。我有一個包含幾個VARCHAR列的表,它們被指定爲非null(即不允許NULL值)。使用舊版本的MySQL PHP命令,我可以做這樣的事情,沒有任何問題:
INSERT INTO mytable SET somevarchar = '';
但是現在,如果我有這樣的查詢:
INSERT INTO mytable SET somevarchar = ?;
然後在PHP我有:
$value = "";
$prepared = $db->prepare($query, array('text'));
$result = $prepared->execute($value);
這將引發錯誤 「null value violates not-null constraint
」
作爲臨時解決辦法,I C heck如果$value
爲空,並將其更改爲" "
(單個空格),但這是一個可怕的黑客攻擊,可能會導致其他問題。
我該如何插入空字符串與準備語句,沒有它試圖插入NULL?
編輯:它是一個項目太大,通過我的整個代碼庫,發現無處不在,使用空字符串「」,並改爲使用NULL。我需要知道的是爲什麼標準MySQL查詢將「」和NULL作爲兩個單獨的東西(我認爲是正確的)對待,但準備語句將「」轉換爲NULL。
請注意,「」和NULL是而不是是同樣的事情。例如,SELECT NULL = "";
將返回NULL
而不是您所期望的1
。
如果插入「」,這是basicly空,爲什麼不改變在該領域數據庫允許爲空。 – UnkwnTech 2008-11-05 20:09:04
它的「基本上爲零」的方式與0基本上是錯誤的一樣。他們很相似,但實際上完全不同。 – nickf 2008-11-05 20:11:30
NULL表示「沒有值」不是,「空字符串」 – warren 2008-11-05 20:12:30