2012-01-28 4 views
0

がDBにdatetimeを簡単に挿入しようと4時間を費やし、その値を再読み込みして経過時間を確認します。私はPHPの例の後で恐ろしい例を見てきました(私のISPはPHP 5.2.1しか持っていません)5.3ではありません。さて、読書の時間後に..私は私を幸せにする解決策を見つけたが、私はそれが私はそれを動作させる必要がある方法で作業を取得する方法を知らない...コードがある...MySqli Prepared Statements 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; 

I PREPAREDステートメント(PS)を使用しています...プロシージャスタイル、PSに変換する方法がわかりません。私は代わりに考えていた?私は今()を置くだろうが、それから何を値段に入れるべきか分からなかった。私はまた考えました...私はちょうどINTにDBを変更し、ちょうどそこにPHPのtime()の値を貼り付け、それを読んだときに数学を行います。それ以外の選択肢はありますが...これはSQLが「仕事」をするようにします。これをPSに変換できますか?

ありがとうございました!

私がやりたいすべてのさ...

更新今でレコードが()THEN私はそのレコードを書いてから経過したどのくらいの時間を見つけると、十分な時間が経過した場合、それを削除します。

作業がある上記のコードを示すWebサイト...

http://sqlize.com/r1mlXcM62V

答えて

0

は、それはすべてのアウトこれを理解するのに苦労の全体の1日だったと私はそれをやったように見えます。奇妙なことは、SQLは実際には非常に簡単です、PHPは非常に簡単です。私は老いていて、私の脳は錆びています(17歳以上でプログラムされています)。私はそれが私の頭の中で働くはずであり、何かを研究し、理解するのに何時間もかかるはずです。私は私が考えていたので、DELETEステートメントにそれを変更する必要がある以外SO ...私は> 16見つかったすべてのタイムスタンプを削除すること

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

... ...

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

を解決策を見つけましたmin old。作品。私はバインドする変数がない場合に何をすべきかを研究していました.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'); 
} 
関連する問題