NOW() als Update_Expression im MySQLI Update funktioniert nicht
medi
- php
Hallo,
stehe gerade vor einem Problem, was mir vorher noch nicht untergekommen ist, und weiß nicht weiter.
Folgendes:
* PHP Website + MySQL Datenbank
* DB Zugriff per MySQLI Extension
Wenn ich jetzt ein Update machen möchte, alá
mysqli_query("UPDATE table_xy
SET time_now = NOW()")
// time_now DATETIME default '0000-00-00 00:00:00'
wird im Query nicht der aktuelle Datumsstempel eingefügt, sondern NOW(). Dieses Verhalten beobachte ich jedoch nur, wenn NOW() als Teil einer Update_Expression genutzt wird.
Als Teil einer Select_Expression oder einer Where_Condition funktioniert es ohne Probleme. Bei
mysqli_query("SELECT xy
FROM table_xy
WHERE time_now = 'NOW()'")
wird auch wirklich der Datumsstempel alá 2009-29-06 12:00:00 ausgegeben.
Ich arbeite jetzt zum ersten Mal mit MySQLI, vorher nur mit "normalem" MySQL, und da hat NOW() überall funktioniert. Vielleicht sehe ich auch gerade den Wald vor lauter Bäumen nicht, aber ich bin ratlos.
Woran könnte es denn liegen?
Gruß
medi
n'abend,
mysqli_query("SELECT xy
FROM table_xy
WHERE time_now = 'NOW()'")
warum setzt du die Funktion NOW() in Anführungszeichen? Wäre ich MySQL, würde ich dir sagen, dass der String "NOW()" kein gültiges Datum ist und die Ausführung der Abfrage verwehren.
weiterhin schönen abend...
--
#selfhtml hat ein Forum?
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
warum setzt du die Funktion NOW() in Anführungszeichen? Wäre ich MySQL, würde ich dir sagen, dass der String "NOW()" kein gültiges Datum ist und die Ausführung der Abfrage verwehren.
mmh, das war jetzt nicht wirklich hilfreich...
Und ja das weiß ich, die '' sind im Eifer des Gefechts reingerutscht.
Hello,
warum setzt du die Funktion NOW() in Anführungszeichen? Wäre ich MySQL, würde ich dir sagen, dass der String "NOW()" kein gültiges Datum ist und die Ausführung der Abfrage verwehren.
mmh, das war jetzt nicht wirklich hilfreich...
Und ja das weiß ich, die '' sind im Eifer des Gefechts reingerutscht.
Sind sie in Deinem Projekt nicht eher ins Update-Statement reingerutscht aus Versehen, so wie sie in Deinem Post im Select-Statement gelandet sind?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Sind sie in Deinem Projekt nicht eher ins Update-Statement reingerutscht aus Versehen, so wie sie in Deinem Post im Select-Statement gelandet sind?
Nein sind sie nicht.
Hello,
Woran könnte es denn liegen?
?
Schön, dass Du OS- und MySQL-Version sowie die Distribution, über die Du MySQL eventuell installiert hast, dazu gesagt hast. Da muss man nun gar nicht raten :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Schön, dass Du OS- und MySQL-Version sowie die Distribution, über die Du MySQL eventuell installiert hast, dazu gesagt hast. Da muss man nun gar nicht raten :-)
mmh wußte nicht das dies eine Rolle spielt...
OS: WinXP SP3
Installer: XAMPP
PHP 5.2.9
Apache/2.2.11
MySQL 5.0.51a
Fehlt was?
Hello,
Schön, dass Du OS- und MySQL-Version sowie die Distribution, über die Du MySQL eventuell installiert hast, dazu gesagt hast. Da muss man nun gar nicht raten :-)
mmh wußte nicht das dies eine Rolle spielt...
Naja, es passiert zwar äußerst selten, aber manchmal findet man ja doch noch einen Bug. Und der steckt nicht unbedingt in allen Distributionen oder Versionen
OS: WinXP SP3
Installer: XAMPP
PHP 5.2.9
Apache/2.2.11
MySQL 5.0.51a
auf dieser habe ich es gerade selber getestet, ob es da Ungewöhnliches gibt. Aber es klappt alles, wie vorgesehen.
Zeig doch bitte nochmal Dein Create-Table-Statement dazu
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
auf dieser habe ich es gerade selber getestet, ob es da Ungewöhnliches gibt. Aber es klappt alles, wie vorgesehen.
Zeig doch bitte nochmal Dein Create-Table-Statement dazu
CREATE TABLE IF NOT EXISTS `tablexy` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Username` varchar(20) NOT NULL DEFAULT '',
`LastAccess` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`ID`),
KEY `Username` (`Username`),
KEY `LastAccess` (`LastAccess`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
Etwas gekürzt ;)
Achso memcache 2.2.5 läuft auch noch auf dem Server, wenn es interessiert.
n'abend,
CREATE TABLE IF NOT EXISTS
tablexy
(
ID
int(10) unsigned NOT NULL AUTO_INCREMENT,
Username
varchar(20) NOT NULL DEFAULT '',
LastAccess
datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (ID
),
KEYUsername
(Username
),
KEYLastAccess
(LastAccess
),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
hast du es mal mit einer TIMESTAMP spalte versucht? da könntest du dir auch gleich das aktuelle datum bei jedem update reinschreiben lassen (per definition, ohne dein einwirken)...
Hast du es mal mit den "anderen" Funktionen versucht?
weiterhin schönen abend...
--
#selfhtml hat ein Forum?
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
n'abend,
Wrong button, grmpf.
Hast du es mal mit den "anderen" Funktionen versucht?
Date/Time Funktionen in MSQL. Neben NOW() gibt es noch ne reihe anderer Funktionen, die dir helfen könnten.
weiterhin schönen abend...
Hast du es mal mit den "anderen" Funktionen versucht?
Date/Time Funktionen in MSQL. Neben NOW() gibt es noch ne reihe anderer Funktionen, die dir helfen könnten.
Jap habe ich, ging nirgends.
Naja Thema ist durch, vielen Dank für eure Hilfe.
Gruß
medi
hi,
Hast du es mal mit den "anderen" Funktionen versucht?
Date/Time Funktionen in MSQL. Neben NOW() gibt es noch ne reihe anderer Funktionen, die dir helfen könnten.
Jap habe ich, ging nirgends.
Mit Timestamp könntest du dir das Manuelle Aktualisieren ersparen; warum es bei dir nicht funktionieren soll ist auf Anhieb nicht Nachvollziehbar.
mfg
Hello,
Zeig doch bitte nochmal Dein Create-Table-Statement dazu
CREATE TABLE IF NOT EXISTS
tablexy
(
ID
int(10) unsigned NOT NULL AUTO_INCREMENT,
Username
varchar(20) NOT NULL DEFAULT '',
LastAccess
datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (ID
),
KEYUsername
(Username
),
KEYLastAccess
(LastAccess
),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
>
> Etwas gekürzt ;)
und Fehler reingebaut! Komma zuviel. :-)
~~~sql
CREATE TABLE IF NOT EXISTS `tablexy` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Username` varchar(20) NOT NULL DEFAULT '',
`LastAccess` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`ID`),
KEY `Username` (`Username`),
KEY `LastAccess` (`LastAccess`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
Bei mir funktioniert das Update-Statement
update tablexy
set LastAccess
= now() where id
= 15;
einwandfrei. Da gibt es kein Gemecker.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
hi,
mysqli_query("UPDATE table_xy
SET time_now = NOW()")
// time_now DATETIME default '0000-00-00 00:00:00'
> wird im Query nicht der aktuelle Datumsstempel eingefügt, sondern NOW(). Dieses Verhalten beobachte ich jedoch nur, wenn NOW() als Teil einer Update\_Expression genutzt wird.
Mal mit LIMIT versucht? Bei mir funktioniert
`$_db->query("UPDATE `cms_admin` SET `last_login` = NOW() LIMIT 1");`{:.language-php}
Tadellos.
mfg
--
\--
Mal mit LIMIT versucht? Bei mir funktioniert
$_db->query("UPDATE
cms_adminSET
last_login= NOW() LIMIT 1");
Keine Ahnung warum, aber das funktioniert. OK, werde mich daran halten.
Vielen Dank
Gruß
medi
Hi!
Wenn ich jetzt ein Update machen möchte, alá
mysqli_query("UPDATE table_xy SET time_now = NOW()")
wird im Query nicht der aktuelle Datumsstempel eingefügt, sondern NOW(). Dieses Verhalten beobachte ich jedoch nur, wenn NOW() als Teil einer Update_Expression genutzt wird.Als Teil einer Select_Expression oder einer Where_Condition funktioniert es ohne Probleme. Bei
mysqli_query("SELECT xy FROM table_xy WHERE time_now = 'NOW()'")
wird auch wirklich der Datumsstempel alá 2009-29-06 12:00:00 ausgegeben.
So wie du den Fehler beschreibst müssten die Anführungszeichen genau andersrum vorhanden beziehungsweise nicht vorhanden sein. Denn das obere Statement ist richtig, das untere zwar syntaktisch richtig, aber nicht in deinem Sinn.
Lo!