2012-11-08 45 views
1

可以說我的表只有這些成員 - id(鍵)和日期(默認爲NULL)。 現在,當我想插入一行與我的PHP,我需要我的查詢日期是否具有價值或者不能或我只是插入像這樣前檢查 -MYSQL和PHP INSERT NULL值

$query = "INSERT INTO mytable VALUES(3,{$_GET['date]})" 

和MySQL會分配一個NULL值至今 ?

這是否適用於一張桌子,無論多大?

例如:我可以插入很多來自php的值,並且可能爲空(或空值)到一個表,並且mysql會自動給它們分配NULL(如果我默認當然是將它們定義爲NULL),或者我在我插入之前需要做各種檢查?

+0

你錯過了「在$ _GET [」日期']先從 – Rob

+0

那你怎麼發佈日期表單? – Rob

+0

純粹的理論問題 – user1551120

回答

1

不,它會分配通過參數$_GET['date']傳遞的值。如果值爲空''且日期爲數據類型varchar,則它將插入一個值爲''的值,該值不同於NULL,則會插入一個空值。那是因爲NULL和空字符串不相等。它們在SQL中是兩個不同的東西。

如果要插入NULL值,請在插入列列表中忽略此列,然後將其分配爲默認值NULL。或者將其明確寫入INSERT聲明的值中。

請注意:您的代碼使用這種方式容易受到SQL injection的影響。您應該使用準備好的語句或PDO。有關詳細信息,請參閱本:

  • ​​3210
1

This might be relevant這也可以確保您不容易受到SQL注入攻擊。

我想說,只是親自檢查每個變量,然後你有更多的方式控制你的變量之前,他們把你的數據庫。

0

試試這個

$query = "INSERT INTO mytable VALUES(3,'".$_GET['date']."')"; 

還要考慮你的表字段的數據類型如果其設置爲日期/日期時間的話,還檢查日期的形式$_GET['date']返回值就必須。

+0

這條線和他有什麼不同嗎?就我所知,使用變量的括號可以和你的行一樣。編輯:除了他缺少的報價 – Martin

0
  1. 該片段開放至SQL injection。逃脫你的價值觀或使用準備好的陳述!
  2. 如果該變量不包含任何內容,則查詢將看起來像... VALUES (3,)。這是一個語法錯誤,所以它不起作用。
  3. 如果您將此更改爲VALUES(3, '{$_GET['date']}')",那麼在空變量的情況下,查詢將爲... VALUES(3, ''),空字符串爲值。對於有問題的列,如果是日期列,則會將其轉換爲未識別的日期的某些理智值。那不是NULL

NULL只有在你完全從查詢忽略列或顯式地將它設置爲NULL。在任何其他情況下,該值將不是NULL

0
$date = date("d-m-Y",strtotime($_GET['date'])); 
if(isset($date)) 
    $query = "INSERT INTO mytable VALUES(3,$date)";