私の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スクリプトを実行すると失敗し、データベースに何も挿入できません。
私は何を間違えていますか?
どのようなエラーメッセージが表示されますか?
実際のエラーは、php変数が引用符で囲まれていないためだと思います。これを試して
$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" .$somename . "'";
Now()の使用法は正しいです。ただし、クエリ全体を引用符で囲み、値を引用符で囲む必要があります。
クエリを変更して、開始と終了に二重引用符を使用し、$somename
を単一引用符で囲むことができます。
$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='$somename'";
変数を引用符なしでsqlステートメントに入れるのを忘れました。
$update_query =
"UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'";
この形式は、現在のタイムスタンプを取得してmysqlに保存するために使用されます
$date = date("Y-m-d H:i:s");
$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'";
これらのソリューションはどれも好きではありません。
これは私がそれを行う方法です:
$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);
}
NOW()
の代わりにUNIX_TIMESTAMP()
を使用することもできます:
$update_query = "UPDATE db.tablename
SET insert_time=UNIX_TIMESTAMP()
WHERE username='$somename'";