Ich möchte die aktuelle Zeit mit der mySQL-Funktion NOW () in den aktiven Datensatz von Codeigniter in die Datenbank einfügen. Die folgende Abfrage funktioniert nicht:
$data = array(
'name' => $name ,
'email' => $email,
'time' => NOW()
);
$this->db->insert('mytable', $data);
Dies liegt daran, dass die ActiveRecord-Klasse von CodeIgniter der Eingabe automatisch entgeht.
Das Folgende funktioniert gut, indem Sie set () aufrufen und das Peratmeter FALSE übergeben, damit es nicht dem NOW () entgeht.
$data = array(
'name' => $name ,
'email' => $email,
);
$this->db->set('time', 'NOW()', FALSE);
$this->db->insert('mytable', $data);
Meine Frage ist jedoch, ob es einen anderen Weg als diesen gibt. Zum Beispiel, wenn ich irgendwie verwenden kann, indem ich alles nur in das Datenarray hinzufüge? Zum Beispiel so etwas wie:
$data = array(
'name' => $name ,
'email' => $email,
'time' => NOW(), FALSE
);
php
mysql
codeigniter
römisch
quelle
quelle
strtotime
? Für zBecho date("N", strtotime('now'));
Sie das heutige Datum geben, beziehen sich auf php.net/strtotime und php.net/dateAntworten:
Wenn ich mich nicht sehr irre, lautet die Antwort: "Nein, es gibt keinen Weg."
Das Grundproblem in solchen Situationen ist die Tatsache, dass Sie eine MySQL-Funktion aufrufen und keinen Wert festlegen. CI entkommt Werte , so dass Sie einen sauberen Einsatz tun können , aber es prüft nicht , wenn diese Werte sehen passieren Funktionen zu rufen möchten
aes_encrypt
,md5
oder (in diesem Fall)now()
. Während dies in den meisten Situationen wunderbar ist, ist in diesen Situationen nur rohes SQL der Rückgriff.Auf der einen Seite
date('Y-m-d');
sollte als PHP-VersionNOW()
für MySQL funktionieren . (Es funktioniert jedoch nicht für alle SQL-Versionen).quelle
Ich verwende normalerweise Trigger, um Zeitstempel zu verarbeiten, aber ich denke, dass dies funktionieren kann.
$data = array( 'name' => $name, 'email' => $email ); $this->db->set('time', 'NOW()', FALSE); $this->db->insert('mytable', $data);
quelle
now() + 1 day
irgendwie für aktive Datensätze verwenden?aspirinemaga, ersetzen Sie einfach:
$this->db->set('time', 'NOW()', FALSE); $this->db->insert('mytable', $data);
dafür:
$this->db->set('time', 'NOW() + INTERVAL 1 DAY', FALSE); $this->db->insert('mytable', $data);
quelle
Dies ist die einfache Möglichkeit, das Einfügen von Zeitstempeln zu handhaben
$data = array('created_on' => date('Y-m-d H:i:s'));
quelle
$data = array( 'name' => $name , 'email' => $email, 'time' =>date('Y-m-d H:i:s') ); $this->db->insert('mytable', $data);
quelle
Sie können den Datumshelfer laden und jetzt den Codeigniter interal () verwenden, wenn Sie auf den GMT-Zeitversatz des Benutzers verweisen möchten
es würde so aussehen
$data = array( 'created_on' => date('Y-m-d H:i:s',now()) );
Wenn Sie die GTM-Master-Einstellungen nicht verwenden und Ihre Benutzer ihre eigenen Offsets festlegen lassen, gibt es keinen Vorteil gegenüber der Verwendung der time () -Funktion von php.
quelle
Gemäß dem Quellcode des Codeigniters ist die Funktion
set
definiert als:public function set($key, $value = '', $escape = TRUE) { $key = $this->_object_to_array($key); if ( ! is_array($key)) { $key = array($key => $value); } foreach ($key as $k => $v) { if ($escape === FALSE) { $this->ar_set[$this->_protect_identifiers($k)] = $v; } else { $this->ar_set[$this->_protect_identifiers($k, FALSE, TRUE)] = $this->escape($v); } } return $this; }
Wenn
$key
es sich um ein Array handelt, ignoriert der Codeigniter anscheinend einfach den zweiten Parameter$value
, aber der dritte Parameter$escape
funktioniert während der gesamten Iteration von$key
. In dieser Situation funktionieren die folgenden Codes (unter Verwendung der Kettenmethode):$this->db->set(array( 'name' => $name , 'email' => $email, 'time' => 'NOW()'), '', FALSE)->insert('mytable');
Dadurch werden jedoch alle Daten entfernt, sodass Sie Ihre Daten in zwei Teile aufteilen können:
$this->db->set(array( 'name' => $name , 'email' => $email))->set(array('time' => 'NOW()'), '', FALSE)->insert('mytable');
quelle
Das Setzen von NOW () in Anführungszeichen funktioniert nicht, da Active Records das Escape von NOW () in eine Zeichenfolge einfügt und versucht, es als Zeichenfolge von "NOW ()" in die Datenbank zu verschieben. Sie müssen es verwenden
$this->db->set('time', 'NOW()', FALSE);
um es richtig einzustellen.
Sie können Ihre SQL danach jederzeit mit überprüfen
$this->db->last_query();
quelle
Die Verwendung des Date Helfer hat bei mir funktioniert
$this->load->helper('date');
Dokumentation dazu finden Sie
date_helper
hier .$data = array( 'created' => now(), 'modified' => now() ); $this->db->insert('TABLENAME', $data);
quelle
$this->db->query("update table_name set ts = now() where 1=1")
funktioniert auch für den aktuellen Zeitstempel!quelle
Führen Sie eine Abfrage aus, um now () von mysql zu erhalten, dh wählen Sie now () als nowinmysql aus.
Verwenden Sie dann den Codeigniter, um dies zu erhalten und einzugeben
$data['created_on'] = $row->noinmyssql; $this->db->insert($data);
quelle