2011-08-19 42 views
0

我得到的错误:使用下面的查询时,列的'时间'不能为空,它没有重复,但当再次尝试更新时第一次正常工作我得到的错误:列“时间”不能为空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); 

回答

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

+0

这给了我错误:'你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第7行'视频=视频+'100',Credits = Credits +'200''使用正确的语法。 – Daniel

+0

'... SECOND后忘记逗号' –

+0

忘记一个逗号,固定。 – Johan

0

如果没有重复的,那么这个查询将执行插入,和Time值为空,因为没有值永远设置。 Null + anything为空,因此是错误。

尝试使用... Time = COALESCE(Time, 0) + INTERVAL $time SECOND或类似的方法得到aroun dit。

+0

我得到同样的错误('列 '时间' 不能是null')与'时间= COALESCE(时间,0)+间隔$时间秒' – Daniel

+0

有什么实际的查询字符串您正在构建,插入所有PHP变量? –

+0

已更新的问题 – Daniel

相关问题