3

フィールドを持つテーブルがあります:

「last_modified - タイムスタンプ NOT NULL」

  • デフォルト値を現在のタイムスタンプに設定しました。ただし、これは、スクリプトからではなく、phpMyAdmin から更新または挿入する場合にのみ機能します。

私が試してみました

$sql = sprintf("UPDATE %s SET timestamp=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']);

それでもうまくいかないようです。スクリプトからテーブルごとに更新または挿入するときにタイムスタンプを更新するにはどうすればよいですか?

また、スクリプト出力のサンプルを次に示します。

UPDATE about SET timestamp=now(), page_header = 'ページ ヘッダーがここに入る', sub_header = 'サブ ヘッダーがここに入る', content_short = 'アバウト ページの短い説明が入る場所', content = 'これは完全なコンテンツの説明は 'WHERE id='1' になります

4

4 に答える 4

9

読み間違えているかもしれませんが、列名はlast_modified (入力されたtimestamp ) であるため、クエリは次のようになります。

UPDATE about SET last_modified=now(), 
page_header = 'Page header goes here', 
sub_header = 'Sub header goes here', 
content_short = 'This is where a short description of the about page goes', 
content = 'This is where the full content description goes' 
WHERE id='1'
于 2012-07-03T13:19:22.210 に答える
1

テーブルまたは列名として予約語を使用する場合は、それを引用する必要があります

$sql = sprintf("UPDATE %s SET `timestamp`=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']);

この場合、タイムスタンプを列名として使用したため、引用する必要がありました

タイムスタンプを自動的に更新するには、タイムスタンプ列が 1 つしかない場合は mysql 自体に依存するかON UPDATE CURRENT_TIMESTAMP、タイムスタンプ列を定義するときに追加できます。詳細については、TIMESTAMP の初期化を参照してください。

于 2012-07-03T13:02:42.847 に答える
0

レコードに何かが発生するたびに(つまり、最後に変更された日付/時刻)タイムスタンプを更新する場合は、DBから残すのが最善です。フィールド定義のデフォルト値はINSERT(レコード/フィールドの作成時)でのみ機能するため、信頼できません。SETlast_modified = GETDATE()[またはGETUTCDATE()]を使用すると、実際の関数は実際のSQLによって異なる場合があります。サーバ。

そして、「Ivan Buttinoni」は絶対に正しく、私を含む誰も以前にそれに気づいていませんでした-あなたのフィールド名は間違っていますが、上記のコメントはまだ当てはまります。

于 2012-07-03T13:32:35.080 に答える
0

このフィールドを "now()" できない Framework のようなものがある場合は、フィールドを NOT NULL にして、保存する直前に PHP 変数 (モデル -> フィールド) を null に設定してください。

于 2013-09-27T12:56:20.790 に答える