Вставьте текущую дату / время, используя now () в поле, используя MySQL / PHP

Поскольку MySQL, по-видимому, не может автоматически вставлять функцию now () в поле datetime при добавлении новых записей, таких как некоторые другие базы данных, на основе комментариев, я явно пытаюсь вставить их с помощью инструкции SQL. (Люди, похоже, считают, что временная метка с curdate () не является ответом из-за различных ограничений временной метки.) В Интернете есть множество статей, предлагающих вставить now (), используя SQL.

Однако, когда я пытаюсь вставить дату, используя инструкцию SQL, поле не заполняется текущим временем / датой, но оно дает мне только 0000-00- и т. Д. Это, вероятно, синтаксическая ошибка, но это заставляя меня сходить с ума, поэтому я отправляю его.

mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())"; 

Он вставляет первый и последний, но ничего не добавляется, оставляя 0000-00-00 и т. Д. В поле whenadded.

Тип поля – это дата и время, он не имеет сортировки, атрибутов, нулевого значения по умолчанию или дополнительного. BTW, я попробовал поместить сейчас () в одинарные кавычки … Это забросило ошибку.

СЕЙЧАС () обычно работает в операциях SQL и возвращает дату и время. Проверьте, имеет ли поле базы данных правильный тип (дата и время). В противном случае вы всегда можете использовать функцию PHP date () и вставить:

 date('Ymd H:i:s') 

Но я бы не рекомендовал это.

Вы забыли закрыть команду mysql_query:

mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())" ) ;

Обратите внимание, что последние скобки.

Как сказал Пекка, он должен работать таким образом. Я не могу воспроизвести проблему с этим автономным примером:

 <?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"; } 

Какие (в настоящее время) печатает

 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 

И вот (почти) тот же скрипт, используя поле TIMESTAMP и 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"; } 

Удобно, что временная метка преобразуется в одно и то же строковое представление даты, как в первом примере – по крайней мере, с моей версией PHP / PDO / mysqlnd.

Единственная причина, по которой я могу думать, это добавить ее как строку 'now()' , а не функцию call now() .
Или что-то еще опечатка.

 SELECT NOW(); 

чтобы узнать, вернет ли он правильное значение?

Теперь()

работал на меня. но мой тип поля – только дата, а ваш – дата и время. я не уверен, если это так

Они оба отлично работают для меня …

 <?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); ?> в <?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); ?> 

Боковое примечание: mysql_query () не лучший способ подключиться к MySQL в текущих версиях PHP.

Как насчет 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); ?> в <?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); ?> 

Посмотрите на разницу между NOW (), SYSDATE () и CURRENT_DATE () в MySQL для получения дополнительной информации о NOW () и SYSDATE ().