2010-11-24 4 views
1

Ich habe eine Datenbank mit einer Tabelle, die unter anderem eine Spalte mit Datumsangaben (die Spalte trägt den Namen 'date') im Format Y-m-d enthält.Problem mit 'mysql_fetch_array() übergebenem Argument ist keine gültige MySQL-Ergebnisressource'

Ich möchte alle Zeilen von Daten extrahieren, die im laufenden Monat angemeldet haben, so verwende ich die folgende Abfrage:

$year_month = date("Y-m"); 
$query = "SELECT date FROM tracker WHERE date LIKE '$year_month%'"; 

Wenn ich ausführen die Abfrage und Versuch zur Ausgabe visuell, ich Erhalten Sie den Fehler "Warnung: mysql_fetch_array(): übergebenes Argument ist keine gültige MySQL-Ergebnis-Ressource in Zeile 64".

Linie 64 ist der Beginn der folgenden Schleife:

while($row = mysql_fetch_array($result, MYSQL_ASSOC) 
{ 
    echo "Name :{$row['date']} <br>"; 
} 

ich google abgekocht habe und hatte einen Blick auch hier, aber ich kann nicht diese scheinbar einfache Problem scheinen, um herauszufinden. Soweit ich das beurteilen kann, wird die eigentliche Abfrage gut ausgeführt.

Irgendwelche Ideen?

** Weitere - Call to MySQL Query Below **

$result = mysqli_query($conn, $query); 

$ conn bezieht sich auf die folgende Zeile ein:

$conn = @mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die ('Error connecting to MySQL'); 
+1

Zeigen Sie uns, um den Anruf zu 'mysql_query'. –

+0

fehlt schließende Klammer nach während der Bestimmung – shevski

+0

Guter Punkt. Ich habe seit dem gepostet, dass jedoch und der Fehler geht weiter. –

Antwort

2

Zwei Dinge auf mich herausspringen:

  1. Sind Sie sicher, dass die Abfrage zu diesem Ergebnis gehört? Abfragen wie insert und delete haben keine Ergebnisse. Sie geben einen booleschen Wert zurück, der den Erfolg anzeigt.

  2. Überprüfen Sie, ob die Abfrage erfolgreich war? Überprüfen Sie nach der Zeile, in der Sie mysql_query aufrufen, das Ergebnis. Wenn es falsch ist, können Sie mysql_get_error anrufen, um herauszufinden, was schief gelaufen ist.

EDIT: Okay, Ihr eigentliches Problem ist, dass Sie mysql_* und mysqli_* Befehle abmischen. Sie müssen das eine oder andere verwenden.

+0

Es sollte Ergebnisse für eine SELECT-Abfrage geben. Außerdem überprüfe ich auf Abfragefehler und das scheint alles in Ordnung zu sein. –

+0

Ich habe meine Antwort aktualisiert. Du solltest es wirklich lesen! –

+0

Ich denke du bist richtig! Es wird jetzt korrekt ausgegeben :) Ich weiß nicht viel über 'mysql' und 'mysqli', muss ich nur eine Version auf alle meine Befehle anwenden? –

2

So etwas sollte gut funktionieren ...

if(!$result) 
    throw new Exception("MySQL Error: ".mysql_error()." (#".mysql_errorno().")"); 

if(mysql_num_rows($result) <= 0) 
    echo "No results found."; 
else 
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    echo "Name :{$row['date']} <br>"; 

Wenn Sie den Fehler nicht verstehen, dass Sie von mysql_error() und mysql_errorno() bekommen, dann die Ausgabe veröffentlichen, und wir sollten mit helfen können es.

+0

Es kommt mit 'Keine Ergebnisse gefunden.' Zurück. Ich bin mir nicht sicher, warum das so ist? –

+0

Das bedeutet, dass Sie keine Daten haben, die Ihrer Abfrage entsprechen. Entweder ist Ihre Abfrage fehlerhaft oder die Daten werden nicht in Ihre Datenbank/Tabelle geladen. Um Ihre Abfrage zu bestätigen, setzen Sie 'mysql_query()' '' var_dump ($ query); '. Das wird Ihnen GENAU zeigen, was für eine Abfrage an MySQL gesendet wird. –

+0

Das gibt: string (51) "SELECT Datum von Tracker WHERE Datum wie '2010-11%'" –

0

Was der Datentyp für das Datumsfeld ist, wenn es Datum Typ ist, dann sollten Sie versuchen, folgende:

$query = "SELECT date FROM tracker WHERE year(date)='".date("Y")." and month(date) = '".date("m")."'"; 
$year_month = date("Y-m"); 

$result = mysql_query($query); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC) 
{ 
    echo "Name :{$row['date']} <br>"; 
} 
+0

Wirft den gleichen Fehler wie oben leider. Ich denke, ich bekomme keine Daten von der Abfrage zurück, weiß aber nicht warum. –

+0

sehe meine Antwort oben, ich habe es bearbeitet –

0
$query = "SELECT date FROM tracker WHERE date LIKE '$year_month%'"; 

sollte
$query = "SELECT `date` FROM tracker WHERE `date` LIKE '$year_month%'"; 

Datum ist ein reserviertes Wort in sql.

Look für mehr Beispiele here

Verwandte Themen