2012-01-28 38 views
0

我花了4個小時試圖寫一個簡單的日期時間插入到數據庫中,重新讀取該值並查看經過了多少時間。我在PHP中使用示例(我的ISP只有PHP 5.2.1)而不是5.3中看到了可怕的示例。那麼,閱讀小時後..我發現了一個解決方案,讓我很開心,但我不知道如何得到它,我需要它的工作...代碼是這樣的工作...MySqli準備使用now()插入的語句,並根據時間過去刪除

create temporary table Data 
(dt DateTime); 

insert Data values 
    (now() - INTERVAL 23 MINUTE); 

select 
    TIME_FORMAT(
     TIMEDIFF(now(), dt) 
    ,'%i minute(s) ago' 
    ) 
from Data; 

我使用PREPARED語句(PS)...我不知道如何將其轉換爲程序風格,PS。我在想,而不是?我會把現在(),但我不知道該怎麼把價值。我想也......我只是將數據庫更改爲INT,然後只需將PHP time()值粘在那裏,然後在讀取它時做一些數學運算。這是我的另一種選擇,但是......這將使SQL做「工作」,所以......這可以轉換爲PS?

謝謝!

所有我想要做的是...

更新現在用一記(),然後找出多少時間已經過去了,因爲我寫了這個紀錄,並刪除它,如果有足夠的時間已經過去了。

顯示上面的代碼工作是一個網站...

http://sqlize.com/r1mlXcM62V

回答

0

它一直在努力弄清楚這一切了一整天,它看起來像我做到了。奇怪的是SQL實際上很容易,PHP很容易。我老了,我的大腦已經生鏽(編程已超過17年)。我想象它應該如何在我的腦海中工作,而需要花費幾秒鐘的時間需要數小時才能研究和發現。所以...我找到了解決辦法...

$query = "SELECT TIMESTAMPDIFF(MINUTE, `sesstoken1created`,now()) FROM pcssecurity"; 

除非我必須將它更改爲DELETE語句,所以我想...

$query = "DELETE FROM pcssecurity WHERE TIMESTAMPDIFF(MINUTE, `sesstoken1created`,now()) > 16"; 

這將刪除所有時間戳發現> 16分鐘老。作品。我還在研究如果沒有變量綁定時該怎麼辦。如果不包含BIND變量,那麼它可以正常工作......並且顯然它沒有綁定變量。

SOLUTION

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_USER_PASSWORD, DB_NAME) or die(DB_CONNECT_ERROR . __LINE__); 
$stmt = mysqli_stmt_init($dbc); 

$query = "DELETE FROM tablename WHERE TIMESTAMPDIFF(MINUTE, `datetimefieldhere`,now()) > " . SESSION_TOKEN_EXPIRES_IN_MINUTES; 
$result = mysqli_stmt_prepare($stmt, $query); 
$result = mysqli_stmt_execute($stmt); 
$result = mysqli_stmt_affected_rows($stmt); 

if ($result === -1) { // some error happened 
    die('CreateNewToken insert failed'); 
}