Warning: mysql_fetch_array(): supplied argument is not a ...
dor_neue
- php
0 Der Martin0 Rouven
echo $begruessung;
Schreibe gerade nen Downloadscript - also der User klickt einen Link an (z.B. FileDownload.php?f8b071da2be98f6dd4f1c454f3ca888b) und bekommt dann die Datei hallo.pdf als Download.
Dabei muss ich natürlich auf meine MySQL-Datenbank zurückgreifen:
// Verbindungsaufbau - Verbindungsdaten lass ich hier mal wech :P
if (!($DB_connection = @mysql_connect($hostname,$username,$passwort)))
echo mysql_errno() . ": " . mysql_error(). "\n";
if (!(mysql_select_db($database, $DB_connection)))
echo mysql_errno() . ": " . mysql_error(). "\n";
// Verbindung aufgebaut - bis hierher keine Fehler
// Abfrage formulieren und absenden - einfachhalber schon statischer Wert und keine Variable als physical_filename
$SQL_Abfrage = 'SELECT * FROM files
WHERE physical\_filename
LIKE 'f8b071da2be98f6dd4f1c454f3ca888b' LIMIT 1 ';
$SQL_Ergebniss = mysql_query("$SQL_Abfrage");
// Fehlerausgabe
echo mysql_errno() . ": " . mysql_error(). "\n";
// Anhand der Anzahl der Zeilen erkenne ich wieviele Treffer da sind
echo mysql_num_rows($SQL_Ergebniss);
//
$Details_zum_File = mysql_fetch_array(SQL_Ergebniss);
Danach bekomm ich die Fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ***/FileDownload.php on line 55
Die Sterne anstelle des Pfades...
Und nun mein großes Problem: Der Fehler kommt nur, wenn mysql_num_rows($SQL_Ergebniss) > 0 und liefert über mysql_error() dabei KEINEN Fehler zurück... Die gleiche Abfrage im phpmyadmin funzt ohne Probleme...
Und um jetzt noch eins draufzusetzen - wenn die Abfrage keine Einträge zurückliefert - dann kommt keine Fehlermeldung...
Hallo,
Dabei muss ich natürlich auf meine MySQL-Datenbank zurückgreifen:
"natürlich"? Du könntest die Dokumente ebensogut aus dem Dateisystem des Servers holen und so ausliefern.
$SQL_Ergebniss = mysql_query("$SQL_Abfrage");
"Ergebnis" mit Doppel-s zu schreiben, ist anscheinend eine sehr verbreitete Unsitte. Nebenbei: Warum bettest du $SQL_Abfrage erst noch in einen String ein und machst dem Parser damit unnötig mehr Arbeit?
$Details_zum_File = mysql_fetch_array(SQL_Ergebniss);
Danach bekomm ich die Fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ***/FileDownload.php on line 55
Das wundert mich nicht. Ein Klassiker:
Zu wenig Geld. Investier hier mal ein paar Dollar.
Oder hast du zusätzlich noch eine Konstante SQL_Ergebniss definiert, die auch noch zufällig denselben Wert hat wie die Variable $SQL_Ergebniss? Im übrigen wundert mich, dass PHP nicht noch eine Meldung (eine Notice) ausgibt, die dich auf die Verwendung einer nicht definierten Konstanten hinweist ...
Und um jetzt noch eins draufzusetzen - wenn die Abfrage keine Einträge zurückliefert - dann kommt keine Fehlermeldung...
Klar, dann wird der Aufruf von mysql_fetch_array() ja gar nicht ausgeführt.
So long,
Martin
$SQL_Abfrage = 'SELECT * FROM
files
WHEREphysical\_filename
LIKE 'f8b071da2be98f6dd4f1c454f3ca888b' LIMIT 1 ';
der Einsatz von LIKE ohne Wildcard dürfte wenig Mehrwert bringen - im Gegenteil. Geh auf ein normales = zurück.
Hab ich gemacht - danke für den Tipp...
Eigentlich war vorher auch nen =geplant, aber bei meinem rumprobieren bin ich dann auch über LIKE %...% zu LIKE gekommen und hab es nicht mehr zurück geändert...
Hallo,
Dabei muss ich natürlich auf meine MySQL-Datenbank zurückgreifen:
"natürlich"? Du könntest die Dokumente ebensogut aus dem Dateisystem des Servers holen und so ausliefern.
Jop, geht auch - aber ich will:
Ansonsten würde ja nen Link auf die Datei reichen - ich will aber header, SQL, PHP und Dateihandling usw. üben...
$SQL_Ergebniss = mysql_query("$SQL_Abfrage");
"Ergebnis" mit Doppel-s zu schreiben, ist anscheinend eine sehr verbreitete Unsitte. Nebenbei: Warum bettest du $SQL_Abfrage erst noch in einen String ein und machst dem Parser damit unnötig mehr Arbeit?
Weil ich es so in einem PHP-Tut gelernt habe und ca. 75% der TuT's die ich gefunden habe, das auch so machen...
Irgendwie dort abgeschaut und unbewusst übernommen...
Hast aber natürlich Recht, dass hier eine Var unnütze belegt wird...
$Details_zum_File = mysql_fetch_array(SQL_Ergebniss);
Danach bekomm ich die Fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ***/FileDownload.php on line 55Das wundert mich nicht. Ein Klassiker:
Zu wenig Geld. Investier hier mal ein paar Dollar.
Mhhhh, das war das Problem... Soll ich sagen, dass ich bestimmt 4 Stunden probiert habe bevor ich hier gepostet habe? So ein sinnloser Fehler...
DANKE an Euch Beide - freut mich, dass man hier so schnell Hilfe findet und solche Probleme so schnell gelöst werden können...
Hi dor_neue,
"Ergebnis" mit Doppel-s zu schreiben, ist anscheinend eine sehr verbreitete Unsitte. Nebenbei: Warum bettest du $SQL_Abfrage erst noch in einen String ein und machst dem Parser damit unnötig mehr Arbeit?
Weil ich es so in einem PHP-Tut gelernt habe und ca. 75% der TuT's die ich gefunden habe, das auch so machen...
Irgendwie dort abgeschaut und unbewusst übernommen...
Hast aber natürlich Recht, dass hier eine Var unnütze belegt wird...
Deine Tutorials schreiben ernsthaft $foo = "$bar"? Dann solltest du dir lieber bessere Tutorials suchen ;-) Denn $foo = $bar ist ganz klar die bevorzugte Methode, während ersteres gemeinhin als schlechter Stil bezeichnet wird.
Anders sieht das natürlich aus, wenn du Strings verknüpfen willst, dann hast du im Prinzip 3 Möglichkeiten:
$foo = "ein Text und $bar";
$foo = "ein Text und " . $bar;
$foo = 'ein Text und ' . $bar;
Die erste und die letzte Methode halte ich für vernünftig. Bei der zweiten kann man sich streiten, das läuft dann wahrscheinlich auf eine grundsätzliche Diskussion zum Thema double- or single-quoted Strings hinaus ;-)
Mhhhh, das war das Problem... Soll ich sagen, dass ich bestimmt 4 Stunden probiert habe bevor ich hier gepostet habe? So ein sinnloser Fehler...
Ein bisschen error_reporting(E_ALL); kann einem Stunden von Arbeit ersparen, wie du nun selber erfahren hast. Deshalb gewöhne dir an, zum Entwickeln immer alle Fehlermeldungen zu aktivieren.
Viele Grüße,
~ Dennis.
$SQL_Abfrage = 'SELECT * FROM
files
WHEREphysical\_filename
LIKE 'f8b071da2be98f6dd4f1c454f3ca888b' LIMIT 1 ';
der Einsatz von LIKE ohne Wildcard dürfte wenig Mehrwert bringen - im Gegenteil. Geh auf ein normales = zurück.
MfG
Rouven