Как вставить метку времени в таблицу mysql
В таблице mysql у меня есть поле с именем date, его тип называется timestamp, а по умолчанию - CURRENT_TIMESTAMP. Однако, если я покину поле в mysql, я получаю сообщение об ошибке. Когда я пытаюсь вставить что-то в него, как time(), я получаю дату как 0000-00-00 00:00:00.
<?php
$name = "";
$email = "";
$subject = "";
$comments = "";
$nameError = "";
$emailError = "";
$subjectError = "";
$x = 5;
function filterData($data)
{
$data = htmlspecialchars($data);
$data = stripslashes($data);
return $data;
}
$connection = mysql_connect('host', 'user', 'pass');
if (!$connection) {
die('Could not connect: ' . mysql_error());
}
$select_database = mysql_select_db("contact");
if (!$select_database) {
echo "could not select database " . mysql_error();
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//handles the name
$name = filterData($_POST["name"]);
if (empty($name)) {
$nameError = "please don't leave the name field blank";
}
//handles the email
$email = filterData($_POST["email"]);
if (empty($email)) {
$emailError = "please don't leave the email field blank";
}
//handles the subject
$subject = filterData($_POST["subject"]);
if (empty($subject)) {
$subjectError = "please don't leave this field blank";
}
$comments = filterData($_POST["comments"]);
}
$insertation = "INSERT INTO contactinfo (name, email, subject, date, comments)
VALUES ('$name', '$email', '$subject', '', '$comments')";
$insertationQuery = mysql_query($insertation, $connection);
if (!$insertationQuery) {
echo "Could not process your information " . mysql_error();
} else {
echo "Thank you for submitting the information";
}
?>
Ответы
Ответ 1
В дополнение к проверке настройки вашей таблицы, чтобы подтвердить, что для поля установлено значение NOT NULL
с по умолчанию CURRENT_TIMESTAMP
, вы можете вставлять значения даты/времени из PHP, записывая их в строчном формате, совместимом с MySQL.
$timestamp = date("Y-m-d H:i:s");
Это даст вам текущую дату и время в строчном формате, который вы можете вставить в MySQL.
Ответ 2
Пожалуйста, попробуйте CURRENT_TIME()
или now()
функции
"INSERT INTO contactinfo (name, email, subject, date, comments)
VALUES ('$name', '$email', '$subject', NOW(), '$comments')"
ИЛИ ЖЕ
"INSERT INTO contactinfo (name, email, subject, date, comments)
VALUES ('$name', '$email', '$subject', CURRENT_TIME(), '$comments')"
ИЛИ вы можете попробовать с функцией date
PHP здесь:
$date = date("Y-m-d H:i:s");
Ответ 3
$insertation = "INSERT INTO contactinfo (name, email, subject, date, comments)
VALUES ('$name', '$email', '$subject', CURRENT_TIMESTAMP, '$comments')";
Вы можете использовать этот запрос. CURRENT_TIMESTAMP
Ответ 4
Вы можете попробовать использовать TIMESTAMP (curdate(), curtime()) для использования текущего времени.
Ответ 5
Вам не нужно вставлять текущую временную метку вручную, поскольку MySQL
предоставляет эту возможность для ее автоматического сохранения. Когда таблица MySQL
создана, просто сделайте это:
- выберите
TIMESTAMP
качестве типа столбца - установите значение по
Default
CURRENT_TIMESTAMP
- затем просто
insert
любые строки в таблицу, не вставляя никаких значений для столбца time
Вы увидите, что current timestamp
автоматически вставляется при вставке строки. Пожалуйста, смотрите прикрепленную картинку.
Ответ 6
Значение DEFAULT
для столбца в MySql используется только в том случае, если ему не предоставлено значение для этого столбца. Так что если вы
INSERT INTO contactinfo (name, email, subject, date, comments)
VALUES ('$name', '$email', '$subject', '', '$comments')
Вы не используете значение DEFAULT
для date
столбца, но вы предоставляете пустую строку, поэтому вы получаете ошибку, поскольку вы не можете сохранить пустую строку в столбце DATETIME
. То же самое применимо, если вы используете NULL
, потому что снова NULL
является значением. Однако, если вы удалите столбец из списка вставляемого столбца, MySql будет использовать значение DEFAULT
указанное для этого столбца (или тип данных по умолчанию)