Я пишу код для информационного бюллетеня с помощью codeigniter, но, пытаясь ввести значение даты и времени в базу данных, я продолжаю получать «0000-00-00 00:00:00» в качестве значения даты и времени, может ли кто-нибудь указать мне правильно направление
Я проверил похожие темы, но, похоже, ни одна из них не работает для меня.
Вот неверный код
<?php
class Process extends CI_Model {
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function add_quotes($str)
{
return "'".$str."'";
}
function newsletter_user($log_data)
{
$this->load->helper('date');
date_default_timezone_set('Africa/Lagos'); # add your city to set local time zone
$now = date('Y-m-d H:i:s');
$query = $this->db->query('SELECT email FROM newsletter WHERE email ='. $this->add_quotes($log_data['email']));
if (!empty($query->result()))
{
$this->session->set_userdata('error', 'This email is already registered');
}
else {
$this->db->query('INSERT INTO newsletter (first_name, last_name, email, date_subscribe) VALUES ('.$this->add_quotes($log_data['firstname']).', '.$this->add_quotes($log_data['lastname']).', '.$this->add_quotes($log_data['email']).', '.$this->add_quotes($log_data[date('Y-m-d H:i:s')]).')');
$this->session->set_userdata('error', 'Registration successful! You would be notified once we launch');
}
//return $query;
}
}
?>
Кроме того, я рекомендую использовать параметризованные запросы, а не метод add_quotes
— экранирование значений будет намного безопаснее, а ваш код будет легче читать.
@Jerry, я заменил $now на date('Y-m-d H:i:s'); это то же самое, и мне сказали, что метка времени не работает для DATETIME
@ Джерри, пожалуйста, что ты имеешь в виду под параметризованными запросами?
Я должен был сказать "привязки запросов" - codeigniter.com/user_guide/database/queries.html#query-bindings
Получается, что проблема была в $log_data.
это можно решить, удалив '$log_data' любым из этих способов;
$this->db->query('INSERT INTO newsletter (first_name, last_name, email, date_subscribe) VALUES ('.$this->add_quotes($log_data['firstname']).', '.$this->add_quotes($log_data['lastname']).', '.$this->add_quotes($log_data['email']).', '.$this->add_quotes($now).')');
или
$this->db->query('INSERT INTO newsletter (first_name, last_name, email, date_subscribe) VALUES ('.$this->add_quotes($log_data['firstname']).', '.$this->add_quotes($log_data['lastname']).', '.$this->add_quotes($log_data['email']).', '.$this->add_quotes(date('Y-m-d H:i:s')).')');
4 дня за глупую ошибку!
Я не вижу, где используется ваша переменная
$now
, но, вероятно, было бы лучше, чтобы mysql в любом случае заполнил дату автоматически, используяCURRENT_TIMESTAMP
в качестве значения по умолчанию.