#php #mysql #date #phpmyadmin
#php #mysql #Дата #phpmyadmin
Вопрос:
Я использую MySQL DATETIME
для установки даты и времени в двух разных таблицах базы данных (с помощью PHP). Один из этих экземпляров находится в users
таблице и регистрирует время регистрации учетной записи пользователя и время последнего входа в систему. Другое использование находится в отдельной messages
таблице (в той же базе данных), которая регистрируется, когда пользователь отправляет сообщение другому пользователю.
Хотя код MySQL DATETIME
одинаков в каждой таблице, в messages
таблице он записывает дату, но время отправки сообщения всегда ровно в полночь, например 2021-12-06 00:00:00
В phpMyAdmin , который я использую DATETIME
, нет значения по умолчанию и нет null в обеих таблицах.
Инструкции, подготовленные PHP для каждого использования, приведены ниже. Как вы можете видеть, там, где необходимы данные и время, я использую эту current_date
функцию.
ПРИМЕР 1 users
таблица (время правильно записано в базе данных). Примечание: некоторые переменные, такие как fname
, взяты из элементов формы. Я не включил код формы, чтобы упростить код.
$passwordHash = password_hash($pword, PASSWORD_DEFAULT); $sql = "INSERT INTO lj_users (firstname, lastname, email, username, password, date_registered, last_login, active, profile_image, permissions) VALUES (:firstname, :lastname, :email, :username, :password, current_date, current_date, 0, '', 'standard' )"; $stmt = $connection-gt;prepare($sql); $stmt-gt;bindParam(':firstname', $fname); $stmt-gt;bindParam(':lastname', $lname); $stmt-gt;bindParam(':email', $email); $stmt-gt;bindParam(':username', $uname); $stmt-gt;bindParam(':password', $passwordHash); $stmt-gt;execute();
ПРИМЕР 2 (время НЕПРАВИЛЬНО записано в базе данных)
$message_sql = "INSERT INTO lj_messages (message_title, message_body, dm_recipient_id, dm_sender_id, message_date) VALUES (:message_title, :message_body, :dm_recipient_id, :dm_sender_id, current_date )"; $stmt = $connection-gt;prepare($message_sql); $stmt-gt;bindParam(':message_title', $dm_title); $stmt-gt;bindParam(':message_body', $dm_body); $stmt-gt;bindParam(':dm_recipient_id', $dm_recipient_id); $stmt-gt;bindParam(':dm_sender_id', $dm_sender_id); $stmt-gt;execute();
Я абсолютно не представляю, почему это происходит.
Комментарии:
1. Потому
current_date
что это именно так: свидание. Почему это работает на другом столе, я не мог сказать. Если вам нужна дата-время, используйтеnow()
вместо этого.2. @aynber — спасибо, что разобрались с проблемой в
messages
таблице. Однако почемуcurrent_date
работает страница регистрации в таблице пользователей? Я этого не понимаю?3. Это
date_registered and last_login
тип ДАТЫ, а не ДАТА-ВРЕМЯ4. @RiggsFolly нет, это тип ДАТЫ и времени во всех случаях
5. Дважды проверьте
show create table `messages`
и посмотрите , есть ли в этих полях значение по умолчанию.
Ответ №1:
current_date
возвращает только дату:
mysqlgt; select current_date; -------------- | current_date | -------------- | 2021-12-07 | --------------
Вы хотите now()
, что возвращает дату и время.
mysqlgt; select now(); --------------------- | now() | --------------------- | 2021-12-07 09:33:40 | ---------------------