2013-12-21 22 views
0

該查詢是針對與PayPal集成的IPN腳本。除了將數據插入表格之外,一切都在腳本中起作用。這裏是插入數據的代碼,所有對象都有它們合適的值。mysql INSERT沒有做任何事情

if ($item == "RuneCoins") { 
     mail("[email protected]", "Item purchased!", "$acc has just purchased $item for $paid."); 
    mysql_query("INSERT INTO `purchases` (`id`, `email`, `price`, `product`, `fname`, `lname`, `time`, `transaction_id`, `acc`) VALUES (NULL, '$email', '$paid', '$item', '$fname', '$lname', CURRENT_TIMESTAMP, '$trans', '$acc');"); 
} else { 
     mail("[email protected]", "Invalid item!", "$acc purchased $item, and it was invalid."); 
} 

我收到用戶已購買物品的電子郵件,但未將數據插入表中。這是爲什麼發生?

這裏是表

CREATE TABLE IF NOT EXISTS `purchases` (
    `id` int(11) NOT NULL, 
    `email` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `price` int(11) NOT NULL, 
    `product` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `fname` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `lname` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `transaction_id` bigint(11) NOT NULL, 
    `acc` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `delivered` int(11) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

我在做什麼錯的SQL結構?

+4

嘗試輸出mysql_error() - 在猜測,我會說這是因爲你試圖插入NULL到'ID'。 – andrewsi

回答

1

我看到了問題。您不能使用NULL作爲id的值,因爲它在您的create table聲明中特別禁止。你需要做的是兩倍。

首先,您的插入改成這樣:

mysql_query("INSERT INTO `purchases` (`id`, `email`, `price`, `product`, `fname`, `lname`, `time`, `transaction_id`, `acc`) VALUES (0, '$email', '$paid', '$item', '$fname', '$lname', CURRENT_TIMESTAMP, '$trans', '$acc');"); 

唯一的變化我做了有改變NULL0,因爲0將是有效的,並與未來的變化很好地工作。改變二,修改您創建表:

CREATE TABLE IF NOT EXISTS `purchases` (
    `id` int(11) NOT NULL auto_increment, 
    `email` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `price` int(11) NOT NULL, 
    `product` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `fname` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `lname` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `transaction_id` bigint(11) NOT NULL, 
    `acc` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `delivered` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

你需要確保你的id場是自動遞增。如果它不是自動遞增的,那麼你必須在代碼中維護一個計數器,這很煩人。將其更改爲自動增量將允許您將0作爲id,它將被解釋爲<the next available id>

希望這會有所幫助。

+0

「#1075 - 表格定義不正確;只能有一個自動列,並且必須將其定義爲關鍵字」 – Tyluur

+0

「。生病修改sql。對不起,回合。現在更新 – loushou

+0

。添加了主鍵位。謝謝 – loushou