2011-08-19 38 views
-2

Possible Duplicate:
MySQL ERROR: Column 'Time' cannot be nullMySQL錯誤:列「時間」不能爲空

我收到錯誤:列「時間」不能爲空,這是我的代碼:

$table = "highscores"; 

// Initialization 
$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()); 
} 

if($_GET['secret'] != "5920239") { 
      header("Location: /404.html"); 
    exit(); 
} 

// 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/UPDATE 
$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

'Time'列的類型是什麼? 「CREATE TABLE」語句中的完整列定義可能會有所幫助。 – nobody

+0

問題在於Time = DATE_ADD(IFNULL(Time,now()),INTERVAL'$ time'SECOND)' - 某種程度上它將Time設置爲NULL。也許是因爲$時間是不確定的?由於我不知道你的輸入是什麼樣的,我不確定確切的原因,但這是你需要調查的地方。 – Flimzy

+1

嘗試使用'$ time = int($ time);'而不是'$ time = mysql_real_escape_string($ time);'並用'INTERVAL $ time SECOND'替換'INTERVAL'$ time'SECOND'。另外,如果您使用預留的佔位符查詢,而不是手動轉義每個變量,您將不太可能讓安全問題漏洞化。 –

回答

3

DATE_ADD()無法在TIME數據類型上工作,第一個參數只能是DATE。同樣將'100'分配給TIME列導致'00:01:00',我不認爲這是你想要的。我相信你想做什麼你應該使用TIMESTAMP類型的列或只是UNSIGNED INT,並用簡單的+操作替換你的DATE_ADD()。

+0

將試試這個,謝謝。 – Daniel

+0

它現在更新使用INT與秒,是否有一種方法,我可以轉換這是HH:MM:SS時,顯示在排行榜(PHP)? – Daniel

+0

您可以使用MySql中的SEC_TO_TIME(秒)將秒轉換爲HH:MM:SS格式。 – nobody

0

您是否將值設置爲$time?如果$_GET['time']沒有通過,您的代碼將其初始化爲"",這可能會導致您的問題。

+0

是的,我爲它設置的值,它的URL設置,send.php?時間= 100等 – Daniel

+0

嘗試實施@Conspicuous編譯器的建議在您的問題 – johnluetke

+0

剛剛添加,我仍然得到錯誤'列'時間'不能爲空' – Daniel