web-dev-qa-db-ja.com

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

私のMySQLデータベースには、構造を持つテーブルがあります

username - varchar
insert_time - timestamp

このテーブルはphpMyAdminツールを使用してMySQLで作成され、insert_time列については、デフォルト値を0000-00-00 00:00:00として言及しました。

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

次のPHPコードを実行してみました。

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

PHPスクリプトを実行すると失敗し、データベースに何も挿入できません。

私は何を間違えていますか?

41
arun nair

どのようなエラーメッセージが表示されますか?

実際のエラーは、php変数が引用符で囲まれていないためだと思います。これを試して

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

Now()の使用法は正しいです。ただし、クエリ全体を引用符で囲み、値を引用符で囲む必要があります。

クエリを変更して、開始と終了に二重引用符を使用し、$somenameを単一引用符で囲むことができます。

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

変数を引用符なしでsqlステートメントに入れるのを忘れました。

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

この形式は、現在のタイムスタンプを取得してmysqlに保存するために使用されます

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

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'"; 
8
Kalaivani M

これらのソリューションはどれも好きではありません。

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

$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);
}
1
redux

NOW()の代わりにUNIX_TIMESTAMP()を使用することもできます:

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

MySQLのUNIX_TIMESTAMPとNOW()の違い

0
simhumileco