Sejak MySQL jelas tidak bisa secara otomatis menyisipkan fungsi now() di bidang datetime dalam menambahkan catatan baru seperti beberapa database lain, berdasarkan komentar, saya'm secara eksplisit mencoba untuk memasukkannya menggunakan pernyataan SQL. (Orang-orang tampaknya berpikir timestamp dengan curdate() tidak menjawab karena berbagai keterbatasan timestamp.) Ada banyak artikel di web menunjukkan memasukkan now() menggunakan SQL harus bekerja.
Ketika saya mencoba untuk memasukkan tanggal saat menggunakan pernyataan SQL, namun, bidang tidak mengisi dengan arus waktu/tanggal, tapi itu hanya memberi saya default 0000-00-, dll. Ini mungkin adalah sebuah kesalahan sintaks, tetapi itu's membuatku gila, jadi saya posting.
mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())";
Itu sisipan pertama dan terakhir, tapi tidak ada yang ketika ditambahkan, meninggalkan 0000-00-00, dll. di whenadded lapangan.
Bidang tipe datetime, ia tidak memiliki pemeriksaan, atribut, null default atau tambahan. BTW, saya mencoba menempatkan sekarang() dalam tanda kutip tunggal... Itu melemparkan kesalahan.
SEKARANG() biasanya bekerja dalam pernyataan SQL dan mengembalikan tanggal dan waktu. Periksa apakah database field memiliki tipe yang benar (datetime). Jika tidak, anda selalu dapat menggunakan PHP tanggal() fungsi dan masukkan:
date('Y-m-d H:i:s')
Tapi saya tidak't merekomendasikan ini.
Anda lupa untuk menutup mysql_query perintah:
mysql_query("SISIPKAN KE pengguna (first, last, whenadded) VALUES ('$pertama', '$terakhir', now())"
);
Catatan yang terakhir tanda kurung.
Seperti Pekka mengatakan, itu harus bekerja dengan cara ini. Saya dapat't mereproduksi masalah dengan self-contained contoh:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
first int,
last int,
whenadded DATETIME,
primary key(id)
)
');
$pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,1,Now())');
$pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,2,Now())');
$pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,3,Now())');
foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
echo join(' | ', $row), "\n";
}
Yang (saat ini) cetakan
1 | 0 | 1 | 2012-03-23 16:00:18
2 | 0 | 2 | 2012-03-23 16:00:18
3 | 0 | 3 | 2012-03-23 16:00:18
Dan berikut's (hampir) script yang sama menggunakan TIMESTAMP lapangan dan DEFAULT CURRENT_TIMESTAMP:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
first int,
last int,
whenadded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
primary key(id)
)
');
$pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,1)');
$pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,2)');
sleep(1);
$pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,3)');
foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
echo join(' | ', $row), "\n";
}
Mudah, dikonversi ke timestamp yang sama datetime representasi string seperti pada contoh pertama - setidaknya dengan PHP/PDO/mysqlnd versi.
Bagaimana SYSDATE() ?
<?php
$db = mysql_connect('localhost','user','pass');
mysql_select_db('test_db');
$stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
"('{$first}','{$last}','SYSDATE())";
$rslt = mysql_query($stmt);
?>
Melihat https://stackoverflow.com/questions/24137752/difference-between-now-sysdate-current-date-in-mysql untuk info lebih lanjut tentang NOW() dan SYSDATE().
Keduanya bekerja dengan baik bagi saya...
<?php
$db = mysql_connect('localhost','user','pass');
mysql_select_db('test_db');
$stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
"('{$first}','{$last}','NOW())";
$rslt = mysql_query($stmt);
$stmt = "INSERT INTO `users` (`first`,`last`,`whenadded`) VALUES ".
"('{$first}', '{$last}', CURRENT_TIMESTAMP)";
$rslt = mysql_query($stmt);
?>
Catatan: mysql_query() adalah bukan cara terbaik untuk terhubung ke MySQL di saat ini versi PHP.