65999
21.01.2012, aktualisiert am 09.11.2016
6391
8
1
Datetime between php Variable
Ich habe ein Problem mit einer sql Abfrage und komme nicht weiter:
Die mysql DB hat bei order_date das Format datetime. Dies lässt sich leider auch nicht ändern.
Ich bekomme stets die Fehlermeldung:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in
$LetzteWoche = date("Y-m-d", time()-(7*24*60*60));
$Gestern = date("Y-m-d", time()-(24*60*60));
$LetzteWocheUhr = "00:00:01";
$GesternUhr = "23:59:59";
$LetzteWoche = $LetzteWoche.$LetzteWocheUhr;
$Gestern = $Gestern.$GesternUhr;
$sql = "SELECT * FROM orders WHERE order_date BETWEEN '$LetzteWoche' AND $Gestern";
while($row = mysql_fetch_object($sql))
{
echo $row->order_date;
}
Die mysql DB hat bei order_date das Format datetime. Dies lässt sich leider auch nicht ändern.
Ich bekomme stets die Fehlermeldung:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 179313
Url: https://administrator.de/forum/datetime-between-php-variable-179313.html
Ausgedruckt am: 24.12.2024 um 01:12 Uhr
8 Kommentare
Neuester Kommentar
hi,
das Mysql Datetime Format ist doch im Format 'Y-m-d H:i:s'. Im Code wird nur das Datum und Uhrzeit zusammengesetzt aber ohne dem Leerzeichen dazwischen.
Versuch mal das Datetime mit leerzeichen zusammenzusetzen, z.B.:
Vielleicht klappts.
Gruß Hartmann
das Mysql Datetime Format ist doch im Format 'Y-m-d H:i:s'. Im Code wird nur das Datum und Uhrzeit zusammengesetzt aber ohne dem Leerzeichen dazwischen.
Versuch mal das Datetime mit leerzeichen zusammenzusetzen, z.B.:
$LetzteWoche = $LetzteWoche.' '.$LetzteWocheUhr;
$Gestern = $Gestern.' '.$GesternUhr;
Vielleicht klappts.
Gruß Hartmann
Moin,
die WHERE-Clause hat noch Potentiale, auch nachdem du den Formatfehler behoben hast.
Jetzt:
Besser:
Wobei ich mir ohnehin das ganze Rumgeeiere mit $Gestern und $LetzteWoche ersparen würde
-oder-
...und deine Variablen kannst du dann für schlechte Zeiten aufheben.
Grüße
Biber
die WHERE-Clause hat noch Potentiale, auch nachdem du den Formatfehler behoben hast.
Jetzt:
.... WHERE order_date BETWEEN '$LetzteWoche' AND $Gestern";
..... WHERE order_date BETWEEN '$LetzteWoche' AND '$Gestern'";
Wobei ich mir ohnehin das ganze Rumgeeiere mit $Gestern und $LetzteWoche ersparen würde
... WHERE DATEDIFF(order_date, Now()) BETWEEN -7 AND -1
... WHERE DATEDIFF(Now(), order_date) BETWEEN 1 AND 7
Grüße
Biber
Moin moin,
Und damit alles noch funktioniert, schiebst du ein fehlendes mysql_query() zwischen dein Statement und der while-Schleife
PHP-Manual - mysql_query()
Das passt dann jedenfalls zur Fehlermeldung ;)
~Arano
Und damit alles noch funktioniert, schiebst du ein fehlendes mysql_query() zwischen dein Statement und der while-Schleife
// ...
$sql = "SELECT * FROM orders WHERE DATEDIFF(order_date, Now()) BETWEEN -7 AND -1";
$res = mysql_query($sql);
if( !is_resource($res) )
{
// fange fehler ab
}
while($row = mysql_fetch_object($res))
// ...
Das passt dann jedenfalls zur Fehlermeldung ;)
~Arano
Moin Arano,
Das Offensichtliche wird ja viel zu oft übersehen.
Schönen Sonntag
Biber
Zitat von @Arano:
Und damit alles noch funktioniert, schiebst du ein fehlendes mysql_query() zwischen dein Statement und der while-Schleife
*lach*Und damit alles noch funktioniert, schiebst du ein fehlendes mysql_query() zwischen dein Statement und der while-Schleife
Das Offensichtliche wird ja viel zu oft übersehen.
Das passt dann jedenfalls zur Fehlermeldung ;)
Und auch den Text der Fehlermeldung habe ich (allerdings auch alle anderen in diesem Beitrag) geflissentlich ignoriert.Schönen Sonntag
Biber
Moin,
auch wenn der Hauptfehler ein ganz anderer war als vermutet, noch ein kleiner Tipp zum Überprüfen von zusammengestoppelten Statements.
In der Entwicklungsphase kannst du immer mal schnell 2 Debug-Zeilen einbauen.
Dann hast du sowohl den Statement-Text und im Fehlerfall auch den Fehlercode.
Grüße
Biber
auch wenn der Hauptfehler ein ganz anderer war als vermutet, noch ein kleiner Tipp zum Überprüfen von zusammengestoppelten Statements.
In der Entwicklungsphase kannst du immer mal schnell 2 Debug-Zeilen einbauen.
$LetzteWoche = date("Y-m-d", time()-(7*24*60*60));
$Gestern = date("Y-m-d", time()-(24*60*60));
$LetzteWocheUhr = "00:00:01";
$GesternUhr = "23:59:59";
$LetzteWoche = $LetzteWoche.$LetzteWocheUhr;
$Gestern = $Gestern.$GesternUhr;
$sql = "SELECT * FROM orders WHERE order_date BETWEEN '$LetzteWoche' AND $Gestern";
// die nächsten 2 Zeilen just for debug
echo "{$sql}\n";
mysql_query($sql) or die(mysql_error());
// hier wieder die normaleVerarbeitung
$res = mysql_query($sql);
...
Dann hast du sowohl den Statement-Text und im Fehlerfall auch den Fehlercode.
Grüße
Biber
Hi,
noch eine kleine Ergänzung für die Nachwelt: Um die SQL Abfrage noch flexibler zu gestalten, kannst Du auch Dein "between" stehen lassen und mit SUBDATE arbeiten. Das hat den kleinen Vorteil das es, anders als mit DATEDIFF auch mit anderen Einheiten als "Tage" arbeitet (z.B. HOUR, WEEK, MONTH etc). Aus meiner Sicht ist das "datetime" Format, das beste Format um mit Zeiteinheiten in jeder Art zu rechnen. Also keine Angst vor "datetime" Werten!
Siehe dazu auch: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#fun ...
Gruß
Frank
noch eine kleine Ergänzung für die Nachwelt: Um die SQL Abfrage noch flexibler zu gestalten, kannst Du auch Dein "between" stehen lassen und mit SUBDATE arbeiten. Das hat den kleinen Vorteil das es, anders als mit DATEDIFF auch mit anderen Einheiten als "Tage" arbeitet (z.B. HOUR, WEEK, MONTH etc). Aus meiner Sicht ist das "datetime" Format, das beste Format um mit Zeiteinheiten in jeder Art zu rechnen. Also keine Angst vor "datetime" Werten!
$sql = "SELECT * FROM orders WHERE order_date BETWEEN SUBDATE(NOW(),INTERVAL 8 DAY) AND SUBDATE(NOW(),INTERVAL 1 DAY))";
Gruß
Frank