mysql INSERT没做任何事情

时间:2013-12-21 22:45:44

标签: php mysql sql paypal insert

此查询适用于与PayPal集成的IPN脚本。除了将数据插入表中外,一切都在脚本中工作。这是插入数据的代码,所有对象都有适当的值。

if ($item == "RuneCoins") {
        mail("admin@sallesy.com", "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("admin@sallesy.com", "Invalid item!", "$acc purchased $item, and it was invalid.");
}

我收到用户购买商品的电子邮件,但数据未插入表格中。为什么会这样?

这是表

的SQL结构
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;

我做错了什么?

1 个答案:

答案 0 :(得分: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');"); 。你需要做的是两次。

首先,将插入更改为:

NULL

我在那里做的唯一更改是将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; ,因为0有效,并且可以很好地处理下一次更改。更改两个,修改您的创建表:

id

您需要确保0字段自动递增。如果它没有自动递增,那么你必须在代码中维护一个计数器,这很烦人。将其更改为自动递增将允许您将<the next available id>作为ID,这将被解释为{{1}}。

希望这有帮助。