MySQL错误:列'时间'不能为空

时间:2011-08-19 15:21:19

标签: php mysql

我收到错误:当使用下面的查询时,列'时间'不能为空,它在没有重复时第一次正常工作但是当再次尝试更新时我得到错误:列'时间'不能是空

    mysql_query("
    INSERT INTO
    $table(Username, Time, Videos, Credits)
    VALUES
    ('$user', '$time', '$videos', '$credits')
    ON DUPLICATE KEY UPDATE
    Time=Time+INTERVAL $time SECOND
    Videos=Videos+'$videos',
    Credits=Credits+'$credits'
    ",
    $conn
    );

希望你能发现我的错误,因为我是新手,谢谢!

以下是我的一些代码:

$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_select_db(DB_NAME, $conn);

// Error checking
if(!$conn) {
    die('Could not connect ' . mysql_error());
}

// Localize the GET variables
$user   = isset($_GET['username']) ? $_GET['username'] : "";
$time   = isset($_GET['time']) ? $_GET['time']  : "";
$videos  = isset($_GET['videos']) ? $_GET['videos'] : "";
$credits  = isset($_GET['credits']) ? $_GET['credits'] : "";

// Protect against sql injections
$user  = mysql_real_escape_string($user);
$time  = mysql_real_escape_string($time);
$videos = mysql_real_escape_string($videos);
    $credits = mysql_real_escape_string($credits);
    $secret = mysql_real_escape_string($secret);

// Insert
$retval = mysql_query("
     INSERT INTO
     $table(Username, Time, Videos, Credits)
     VALUES
     ('$user', '$time', '$videos', '$credits')
     ON DUPLICATE KEY UPDATE
     Time = DATE_ADD(IFNULL(Time,now()),INTERVAL '$time' SECOND),
     Videos = Videos+'$videos',
     Credits = Credits+'$credits'
     ",
     $conn
     );
    // End Query


if($retval) {
    echo "Success! Updated $user with Time: $time - Videos: $videos - Credits: $credits";
} else {
    echo "<b>ERROR:</b><br>" . mysql_error();
}

mysql_close($conn);

2 个答案:

答案 0 :(得分:0)

如果没有重复,则此查询将执行插入,Time值将为null,因为没有设置任何值。 Null + anything为空,因此出错。

尝试使用... Time = COALESCE(Time, 0) + INTERVAL $time SECOND或类似内容来获取动态。

答案 1 :(得分:0)

应该是:

mysql_query("
INSERT INTO
$table(Username, `Time`, Videos, Credits)
VALUES
('$user', '$time', '$videos', '$credits')
ON DUPLICATE KEY UPDATE
Time = DATE_ADD(IFNULL(`Time`,now()),INTERVAL '$time' SECOND)
,Videos = Videos+'$videos'
,Credits = Credits+'$credits'
",
$conn
);

不要忘记在所有注入的变量周围加上单引号,否则mysql_real_escape_string保护你。

请参阅:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add