2011-09-20 123 views
46

想知道是否有簡寫版本將新記錄插入啓用主鍵的表中? (即不必在查詢中包括關鍵列) 比方說鍵列,被稱爲ID,其他列FNAME,LNAME和網站PHP mySQL - 在主鍵上使用自動增量插入新記錄

$query = "INSERT INTO myTable VALUES ('Fname', 'Lname', 'Website')"; 
+0

你已經得到了答案。你的例子應該按預期工作(aasuming ID是一個自動增量)。 – konsolenfreddy

+1

@konsolenfreddy:他使用插入sytnax,要求指定每個列值。 – webbiedave

+2

我建議不要在應用程序中插入這種類型的sytnax,因爲如果將來添加列(或更改列順序),則必須返回並更改SQL語句,即使這些列具有默認值。如果它是一次數據庫更新,那麼這沒什麼大不了的。 – webbiedave

回答

94

使用默認的關鍵字:

$query = "INSERT INTO myTable VALUES (DEFAULT,'Fname', 'Lname', 'Website')"; 

此外,您還可以指定列,(這是更好的做法):

$query = "INSERT INTO myTable 
      (fname, lname, website) 
      VALUES 
      ('fname', 'lname', 'website')"; 

參考:

+0

是的,我知道最好設置每一列。但是這張表的表格不會被改變,所以我只是好奇如何使用最少量的代碼來實現這個訣竅。謝謝! – JimmyJammed

+4

「不會被改變」是一個非常巨大的假設。也許這是一個一次性的表格,當你完成這個當前的任務時你會放棄它,但是否則誰知道業務需求何時會以意想不到的方式發生變化。在絕大多數情況下,如果您使用帶列名的第二個表單,那麼接下來需要維護系統的人將非常感激。 – GrandOpener

5
$query = "INSERT INTO myTable VALUES (NULL,'Fname', 'Lname', 'Website')"; 

臨走的價值AI主鍵NULL將分配一個自動遞增的值。

+11

-1,''''不等於NULL。 – Johan

+0

這實在是很冒險的行爲,它依靠MySQL將空字符串轉換爲一個整數(這不是嚴格的行爲),失敗時沒有錯誤(可配置),然後像通常那樣使用null(null變爲空相當於DEFAULT)。我真的建議不要使用這個。 – scragar

+2

這是一箇舊的:P我更新了null而不是空字符串。 –

12

我更喜歡這句法:

$query = "INSERT INTO myTable SET fname='Fname',lname='Lname',website='Website'"; 
+3

+1,我也喜歡,只適用於MySQL /不能在SQLite中運行。 –

4

這是phpMyAdmin方法。

$query = "INSERT INTO myTable 
     (mtb_i_idautoinc, mtb_s_string1, mtb_s_string2) 
     VALUES 
     (NULL, 'Jagodina', '35000')"; 
+0

如果你打算給PHP一個查詢,你應該真的使它成爲一個參數化查詢。 – GrandOpener

相關問題