Datenbank Abfrage
Andreas
- php
-1 ichen-1 Andreas
1 Götz3 Tobias Kloth- datenbank
0 Andreas
Hallo,
bekomm in folgendem Codeteil einen Fehler und weiss nicht wiso:
...
setlocale(LC_TIME, "de_DE");
$aktWoche = strftime("%W",time());
$heute = strftime("%d.%m.%Y",time());
$request = mysql_query("Select * From tb_tageskarte Where (woche = $aktWoche) OR (mdatum = $heute)");
while ($curmem = mysql_fetch_array($request)){
....
Nehme ich "OR (mdatum = $heute)" heraus, funktioniert es.
Datentyp woche ist int(2) und mdatum ist varchar(10)
sowohl $aktWoche als auch $heute geben beim debuggen gültige Werte zurück.
Beim Aufruf der Datei kommt folgender Fehler:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web320/html/angebote.php on line 94
Line 94 ist die Zeile nach dem $request.
Was mache ich falsch?
Gruß Andreas
Moin!
verwende statt
Nehme ich "OR (mdatum = $heute)"
OR (mdatum ='".$heute."')
tschüssi
ichen
Hallo,
ich glaub jetzt wird für heute Zeit den Rechner abzuschalten.
Das Offensichtliche wird glatt übersehen.
Gruß und Danke
Andreas
Hallo Andreas!
$request = mysql_query("Select * From tb_tageskarte Where (woche = $aktWoche) OR (mdatum = $heute)");
Nehme ich "OR (mdatum = $heute)" heraus, funktioniert es.
Datentyp woche ist int(2) und mdatum ist varchar(10)
Was mache ich falsch?
Du solltest $heute erst mit mysql_escape_string() "behandeln", dann sollte es auch funktionieren.
MfG
Götz
Hallo Andreas,
$aktWoche = strftime("%W",time());
$heute = strftime("%d.%m.%Y",time());
$request = mysql_query("Select * From tb_tageskarte Where (woche = $aktWoche) OR (mdatum = $heute)");
ich glaube du suchst als Query eher:
SELECT [spalten] FROM tb_tageskarte WHERE woche = DATE_FORMAT(NOW(),'%x') OR mdatum = NOW()
(wobei mdatum natürlich ein Datumsformat haben muss).
Nehme ich "OR (mdatum = $heute)" heraus, funktioniert es.
lass dir mal den Query ausgeben (Query immer erst in eine Variable schreiben, nie direkt in den Funktionsaufruf von mysql_query()). Du wirst feststellen, dass da was wie »WHERE woche = 51 OR mdatum = 29.12.2004« steht - ich vermute mal, dass sich MySql (nicht PHP! PHP ist es völlig egal, was in dem String der mysql_query übergeben wird, steht) an den fehlenden Anführungszeichen stört.
Datentyp woche ist int(2) und mdatum ist varchar(10)
warum nimmst du für ein Datum nicht einen der dafür vorgesehenen Spaltentypen?
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web320/html/angebote.php on line 94
bei einem solchen Fehler befrage _immmer_ mysql_error() (ein »or die(mysql_error())« hinter mysql_query() kann sowieso nie schaden).
Grüße aus Nürnberg
Tobias
Hallo,
danke erst mal für deine ausführliche Antwort, die mir auch geholfen hat. Ja es lag an den fehlenden Hochkommatas, da Datentyp ein String ist.
warum nimmst du für ein Datum nicht einen der dafür vorgesehenen Spaltentypen?
Für ein Datum nehme ich meistens das Varchar(10) Format, da ich keine Umwandlung bei Eingabe oder Ausgabe benötige. Außerdem kann ich das Datum ja bequem in ein Array einlesen und die Bestandteile extrahieren.
bei einem solchen Fehler befrage _immmer_ mysql_error() (ein »or die(mysql_error())« hinter mysql_query() kann sowieso nie schaden).
Ja klar, hab ich nur nicht gepostet um den Blick aufs wesentliche zu richten. Ich verwende dazu aber eigene Funktionen die dann so aufgerufen werden:
... or database_error(__FILE__, __LINE__);
Gruß und Danke,
Andreas
Hallo Andreas,
warum nimmst du für ein Datum nicht einen der dafür vorgesehenen Spaltentypen?
Für ein Datum nehme ich meistens das Varchar(10) Format, da ich keine Umwandlung bei Eingabe oder Ausgabe benötige.
damit nimmst du dir aber jede Möglichkeit die Datumsfunktionen von MySql zu verwenden (oder nach dem Datum zu sortieren) und musst jedesmal wenn du z.B. das aktuelle Datum einfügen willst das erst mit php zusammenbasteln statt einfach NOW() zu verwenden ...
Außerdem kann ich das Datum ja bequem in ein Array einlesen und die Bestandteile extrahieren.
imho ist es aber wesentlich einfacher das Datum gleich im Query so zu formatieren wie du es brauchst - aber wenn du es unbedingt so machen willst ...
[mysql_error()]
Ja klar, hab ich nur nicht gepostet um den Blick aufs wesentliche zu richten. Ich verwende dazu aber eigene Funktionen die dann so aufgerufen werden:
... or database_error(__FILE__, __LINE__);
das ist natürlich auch on Ordnung, aber das wusste ich ja nicht :-) (wobei du noch den Query übergeben könntest)
Grüße aus Nürnberg
Tobias