• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mysql_fetch_array(): supplied argument is not a valid MySQL result resource

FreddyS

Neues Mitglied
Wenn ich folgenden code verwende um die anzahl datensätze zu ermitteln, erhalte ich folgendes warning (zu $row = ....):

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

code:

$sql = "select count (*) as amount from produkte";
$sql = "where ukat1 = '$ukat1'";
$qry = mysql_query($sql);
$row = mysql_fetch_array($qry);

Merkwürdigerweise funktioniert dieser code in einem anderen programm, das ich früher erstellt habe, ohne fehlermeldung/warning.

Kann mir jemand die ursache bzw. den fehler mitteilen, ich finde keinen, obwohl ich jetzt schon eine geraume zeit danach suche.
 
Werbung:
Hallo,

mit der Zeile
PHP:
$sql = "where ukat1 = '$ukat1'";
überschreibst du die Zuweisung von $sql zuvor. Somit fehlt der SELECT-Part im SQL-Statement und ein ungültiges Ergebnis wird zurückgegeben.

Versuche es mal mit:
PHP:
$sql = "select count (*) as amount from produkte ";
$sql .= "where ukat1 = '$ukat1'";

(der Punkt vor dem Gleichheitszeichen verknüpft die beiden Strings miteinander, sodass die eine Zuweisung nicht die andere überschreibt)

Gruß
 
Werbung:
Hallo vitus37,

habe den flüchtigkeitsfehler (fehlender . vor =) behoben.

Leider erscheint die fehlermeldung (warning) aber weiterhin; hat noch jemand eine idee ??

Gruß
 
was passiert, wenn du aus dem
PHP:
$sql .= "where ukat1 = '$ukat1'";
das machst
PHP:
$sql .= "where ukat1 = $ukat1";
 
Werbung:
Du schickst ein SQL-Statement ab, welches in seinem Aufbau nicht korrekt ist. Das das in einem anderen "Programm" so schonmal funktioniert hat bezweifel ich.

Der Fehler in dem Statement ist, dass Du versuchst etwas zu zählen ohne die Datensätze zu gruppieren:
Code:
$sql = "select count (*) as amount from produkte ";
$sql .= "where ukat1 = '$ukat1'";
[COLOR="red"]$sql .= "group by ukat1";[/COLOR]

Btw. wenn Du nur die Anzahl der Einträge zählen willst, würde auch ein

Code:
$sql = "select * from produkte ";
$sql .= "where ukat1 = '$ukat1'";

gefolgt von mysql_query() und dann mysql_num_rows() zum Zählen der Datensätze ausreichen.
 
Hallo threadi,

du hast rcht, der code, der funktioniert ist ohne where-Klausel.

Werde das group by sofort einfügen, besten dank.

Gruss
 
Werbung:
hallo threadi,

ich habe das group by statement eingebaut, das warning erscheint aber weiterhin.

Hast du noch eine idee??
 
Lass dir das Statement ausgeben,

Code:
echo $sql;

direkt nach der letzten $sql-Zeile, und führe es mal so im phpmyadmin aus um zu testen, ob es überhaupt funktioniert.
 
lt.phpmyadmin o. k., es wird kein fehler angezeigt.

Der fehler tritt auch immer in verbindung mit where und group by auf.

Lasse ich where und group by weg, verschwindet auch das warning.

Beim warning
(Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\shop\shopstsuch.php on line 86)wird diese codezeile moniert:

$row = mysql_fetch_array($qry);
 
Werbung:
Hier der gesamte sql-Zugriff:

//Anzahl Datensätze proHersteller ermitteln
$sql = "select count(*) as amount from produkte";
$sql .= "where hersteller_id ='$such1 '";
echo $sql;
$qry = mysql_query($sql);
echo "error ".mysql_error();
$row = mysql_fetch_array($qry);
$anz =$row['amount'];
echo "ANZAHL " . $anz;

$proseite = 1; //Anzahl Anzeigen pro Seite
$seitenzahl = ceil($anz/$proseite); //Anzahl Seitena aufrunden
include ('shopseiten.php');

Moniert wird mit dem warning:
$row = mysql_fetch_array($qry);

Und liefert auch kein Ergebnis ($anz = blank)
 
Das hat rein gar nichts mit group by zu tun, threadi.

Das Problem kann man hier ganz gut erkennen.

PHP:
$such1 = 1;
$sql = "select count(*) as amount from produkte";
$sql .= "where hersteller_id ='$such1 '";
echo $sql;
Code:
AUSGABE: select count(*) as amount from produktewhere hersteller_id ='1 '";

Man merkt ganz gut, dass zwischen "produkte" und "where" ein Leerzeichen sein sollte, aber keines da ist.
Ein weiterer Fehler ist, dass hersteller_id ganz sicher eine Ganzzahl ist. Also darfst (auch wenn es funktioniert) du keine Single Quotes (') benutzen um etwas damit zu vergleichen.
Ein anderer Fehler kann auch sein, dass es das Feld "hersteller_id" nicht in der Tabelle "produkte" gibt. Vielleicht heißt das Feld nur "hersteller".


mysql_num_rows ist zum Zählen immer das Letzte, was man tun sollte, wenn man nur die Anzahl haben will.

-------------------------------------------------------
Im Übrigen, wenn man dich fragt, welches das generiert SQL-Statement + mysql_error()-Resultat ist, solltest du es auch geben.
 
Werbung:
hersteller_id ist keine ganzzahl, single quotes somit in ordnung.

und hersteller_id ist auch in der tabelle produkte.

Fehlerursache ist das fehlende blank zwischen produkte und where.

Vielen Dank für die hilfe.

Gruss
 
Zurück
Oben