Поскольку 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 ().