2014-07-09 4 views
-2

나는 로그인 할 때마다 웹 사이트를 마지막으로 방문한 웹 사이트를 볼 수 있습니다. 데이터베이스의 last_activity 열의 유형이 '시간'입니다. php mysql 마지막 방문

나는 현재 날짜를 보여 주며에서 때마다 사용자가 로그인을 열을 변수 $의하는 currentDate

다음 데이터베이스에 last_activity 컬럼에 변수 $하는 currentDate 설정에 저장하고 업데이트 코드를했다.

하지만이 코드를 테스트 할 때 나는이 결과를 얻을 :

당신의 마지막 방문 : 0시 0분 0초

데이터베이스에 last_activity 컬럼의 유형은 '시간'입니다.

<?php 
session_start(); 

include('db.php'); 

date_default_timezone_set('Asia/Riyadh'); 
$currentDate = date('m/d/Y h:i:s a', time()); 


if(isset($_SESSION['Email']) === true) 
{ 
    mysql_query("UPDATE `table` SET `lastactivity` = ".$currentDate." WHERE email = '".$_SESSION['Email']."'"); 

    $query = "SELECT * FROM `table` WHERE email = '".$_SESSION['Email']."'"; 
    $run = mysql_query($query); 

    while($row = mysql_fetch_array($run)) 
    { 
     $name = $row[1]; 
     $active = $row[10]; 

     echo 'welcome '.$name; 
     echo 'your last visit '.$active; 
     ; 
+0

SET'lastactivity's SET'' last_activity' ?? –

+0

나는 이것을 만들었지 만 효과가 없었다. $ currentDate를 echo 할 때 정확한 현재 날짜가 표시되지만 데이터베이스에 추가하면이 날짜가 0000-00-00 00:00:00이됩니다. 나는 이유를 모른다. – user2521365

답변

2

당신은 TIME 대신 날짜 시간 값을 저장하는 유형 DATETIME 또는 TIMESTAMP을 사용해야합니다

여기 내 코드입니다. TIME 데이터 타입은 날짜의 어떤 개념이 없습니다 :

The TIME Type

MySQL은 검색 및 시간 값을 표시 'HH : MM : SS'형식 (또는 'HHH : MM : SS'큰 시간 값에 대한 형식). TIME 값의 범위는 '-838 : 59 : 59'에서 '838 : 59 : 59'까지입니다.

...

잘못된 시간 값은 00로 변환됩니다 : 00 : 00 '을. 그 때문에의

당신은

your last visit: 00:00:00 

다시 출력으로 데이터베이스에서 얻을.

DATE, DATETIME, and TIMESTAMP Types

날짜 시간 유형 일시 부를 모두 포함 된 값에 사용된다. MySQL은 DATETIME 값을 'YYYY-MM-DD HH : MM : SS'형식으로 검색하여 표시합니다. 지원되는 범위는 '1000-01-01 00:00:00'에서 '9999-12-31 23:59:59'입니다.

편집 :

TIMESTAMP 및 최신의 MySQL 버전 DATETIME 열이 좋은 기능을 가지고, 즉 자동 업데이트 : MySQL은 5.6.5의로

Automatic Initialization and Updating for TIMESTAMP and DATETIME

, TIMESTAMP 및 DATETIME 열은 자동으로 으로 초기화되고 현재 날짜와 시간으로 업데이트됩니다 (즉, i s, 현재 시간 소인 ). 5.6 이전.5는 TIMESTAMP에 대해서만 적용되며 표 당 최대 하나의 TIMESTAMP 열에 대해서는 입니다.

편집 2

게다가

$currentDate = date('m/d/Y h:i:s a', time()); 

리터럴 DATETIME없이 유효한 형식을 생성한다. STR_TO_DATE()를 사용하여 값을 DATETIME으로 변환 할 수는 있지만 권장하지 않습니다. 더 나은 당신은 NOW()에 MySQL의 기능을 사용하여 UPDATE 문을 변경 :

mysql_query("UPDATE `table` SET `lastactivity` = NOW() WHERE email = '".$_SESSION['Email']."'"); 

당신은 DATE_FORMAT()와 MySQL의에서 그것을 검색하는 동안, 당신의 DATETIME 값을 포맷하고이 계산 된 컬럼에 이름 부여 할 수 있습니다 :

$query = "SELECT *, DATE_FORMAT(lastactivity, '%m/%d/%Y %h:%i%s %p') as last_activity FROM `table` WHERE email = '".$_SESSION['Email']."'"; 
$run = mysql_query($query); 

while($row = mysql_fetch_array($run)) 
{ 
    $name = $row[1]; 
    $active = $row["last_activity"]; // access to the column by column name 
    // ... 

참고 SQL 문을 병합하는 대신 준비된 문과 자리 표시자를 사용하여 사용되지 않는 mysql_ * 함수를 PDO 또는 mysqli로 전환하는 것이 좋습니다.

+0

DATE, DATETIME 및 TIMESTAMP 유형으로 유형을 변경하려고 시도했습니다. 하지만 동일한 결과를줍니다. – user2521365

관련 문제