2011-05-20 13 views
39

を使用してMySQLデータベースに現在のタイムスタンプを挿入する方法を、私は構造私のMySQLデータベースではPHPの挿入にクエリ

username - varchar 
insert_time - timestamp 

このテーブルには、phpMyAdminのツールを使用してMySQLで作成されたとし、insert_time列のテーブルを持っています私は0000-00-00 00:00:00という既定値を述べました。

問題は、後でPHPスクリプトを使用して、このデフォルト値を現在のタイムスタンプで更新する必要があることです。

は、私は次のPHPコードやってみました:

PHPスクリプトが実行される
$update_query = 'UPDATE db.tablename SET insert_time=now() '. 
       'WHERE username='.$somename; 

、それが失敗して、データベースに何かを挿入することができません。

私は間違っていますか?

+0

挿入クエリが失敗した場合に表示されるカスタムエラーを設定しました(クエリで "またはdie()"を使用) –

答えて

50

あなたはどのようなエラーメッセージを取得していますか?

あなたの実際のエラーはあなたのPHP変数が引用符で囲まれていないためです。試してみてください

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" .$somename . "'"; 
+4

はい!それが問題でした。 私は今眠るべきだと思います。ここの深夜、IST。そうでなければ、これらの問題はコードのいたる所に忍び寄るでしょう! –

+2

NOW()は冗長で、UNIX_TIMESTAMP()を使用してください。 –

+0

@NitinBansal、ここでは非推奨となっているMySQLのリンクを提供できますか?私はあなたの主張に対する証拠を見つけることができません。 –

7

変数を引用符なしでSQL文に入れるのを忘れてしまった。

$update_query = 
     "UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'"; 
13

now()の使用法は正しいです。ただし、問合せ全体で1つのタイプの引用符を使用し、値のまわりで別の引用符を使用する必要があります。

あなたは最初と最後に二重引用符を使用するようにクエリを変更し、$somename周りの単一引用符ことができます。

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='$somename'"; 
+3

これは解決策ですが、データベースクエリに変数を入れる前に常に変数をエスケープする必要があります。 PDO http://php.net/pdoをこれを助けるデータベース抽象化層としてチェックするか、少なくとも挿入する前にmysql_real_escape_string($ somename)を実行してください。 – mjec

+0

@mjec:あなたは正しいですが、混乱を避けるためにそれを残しました。 OPは問題の行の前に入力をエスケープしている可能性がありますが、これはまったくユーザー入力ではない可能性があります。 –

+0

better:UNIX_TIMESTAMP() –

1

これらの解決策が嫌いですか?

これは私がそれを行う方法です。

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" 
      . sqlEsc($somename) . "' ;"; 

その後、私は自分のsqlEsc機能を使用します。

function sqlEsc($val) 
{ 
    global $mysqli; 
    return mysqli_real_escape_string($mysqli, $val); 
} 
4

このフォーマットは、現在のタイムスタンプを取得するために使用してmysqlの

$date = date("Y-m-d H:i:s"); 

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'"; 
に保存されています
関連する問題