Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 11:11:55 von Marcel Polty
Hallo!
Schon seit Ewigkeiten verwende ich bei MySQL Datenbankabfragen das
folgende Schema:
$result = mysql_query("SELECT id, name FROM mytable");
while ($row = mysql_fetch_array($result))
{
printf ("ID: %s Name: %s", $row[0], $row["name"]);
}
Seit ein paar Wochen arbeite ich nun mit Zend Studio.
Der Zend-Analyzer gibt mir bei der obigen Abfrage den folgenden Fehler
aus:
************************************************************ ************
"Zuweisung innerhalb einer Bedingung"
dann unter Beschreibung:
"Zuweisungen in einem Konditionalausdruck sind manchmal ein
Tippfehler. In vielen Fällen soll eigentlich der Gleichheitsoperator
== anstelle des Zuweisungsoperators benutzt werden. Um diesem Fehler
vorzubeugen können Sie die Variable auf die rechte Seite des Ausdrucks
setzen. In diesem Fall meldet PHP dann einen Parser-Fehler, falls der
Zuweisungsoperator versehentlich verwendet wurde."
************************************************************ ************
Weiß jemand was an der Abfrage falsch ist?
Danke + Gruß
Marcel
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 11:20:05 von Niels Braczek
Marcel Polty schrieb:
> Der Zend-Analyzer gibt mir bei der obigen Abfrage den folgenden Fehler
> aus:
Ich sehe keinen Fehler. Auch keine Fehler*meldung*.
> ************************************************************ ***********=
*
> "Zuweisung innerhalb einer Bedingung"
>=20
> dann unter Beschreibung:
>=20
> "Zuweisungen in einem Konditionalausdruck sind manchmal ein
> Tippfehler. In vielen Fällen soll eigentlich der Gleichheitsoperator
> == anstelle des Zuweisungsoperators benutzt werden. Um diesem Fehle=
r
> vorzubeugen können Sie die Variable auf die rechte Seite des Ausdruck=
s
> setzen. In diesem Fall meldet PHP dann einen Parser-Fehler, falls der
> Zuweisungsoperator versehentlich verwendet wurde."
> ************************************************************ ***********=
*
>=20
> Weiß jemand was an der Abfrage falsch ist?
Nichts. Lies den Hinweis einfach: "Zuweisungen in einem
Konditionalausdruck sind *manchmal* ein Tippfehler." Manchmal. Nicht
immer. Nicht automatisch feststellbar. Solltest du aber wissen, wenn du
"seit Ewigkeiten" solche Konstrukte in PHP benutzt.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 11:39:18 von Marcel Polty
Hallo Niels,
Niels Braczek schrieb:
>Nichts. Lies den Hinweis einfach: "Zuweisungen in einem
>Konditionalausdruck sind *manchmal* ein Tippfehler." Manchmal. Nicht
>immer. Nicht automatisch feststellbar. Solltest du aber wissen, wenn du
>"seit Ewigkeiten" solche Konstrukte in PHP benutzt.
OK, natürlich kann man in den meisten Fällen nicht automatisch
überprüfen ob ein logischer Fehler in einem Script ist.
Ich habe aber alle Datenbankabfrage einer Site in einer Datei. Wenn
ich da den Zend-Analyzer drüber laufen lasse, dann bekomme ich eine
ganze Latte von diesen Meldungen. Ist nicht schön. Das wollte ich weg
haben.
Mag sein das "Ewigkeiten" etwas übertrieben ist. Ich denke die ersten
Versuche mit PHP und MySQL waren so um 2000-2001. Ist noch nicht so
lange, da hast Du Recht.
Gruß
Marcel
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 11:59:39 von Claus Reibenstein
Marcel Polty schrieb:
> Schon seit Ewigkeiten verwende ich bei MySQL Datenbankabfragen das
> folgende Schema:
>
> $result = mysql_query("SELECT id, name FROM mytable");
> while ($row = mysql_fetch_array($result))
> {
> printf ("ID: %s Name: %s", $row[0], $row["name"]);
> }
Du solltest Dir mal überlegen, ob Du nun indiziert oder assoziativ auf
die Daten zugreifen möchtest. Dann könntest Du auf dieses komische
mysql_fetch_array() verzichten und statt dessen mysql_fetch_row() bzw.
mysql_fetch_assoc() nehmen.
Diese Mischform ist irgendwie krank.
> Seit ein paar Wochen arbeite ich nun mit Zend Studio.
> Der Zend-Analyzer gibt mir bei der obigen Abfrage den folgenden Fehler
> aus:
>
> ************************************************************ ************
> "Zuweisung innerhalb einer Bedingung"
>
> dann unter Beschreibung:
>
> "Zuweisungen in einem Konditionalausdruck sind manchmal ein
> Tippfehler. [...]"
> ************************************************************ ************
Ich kann mir nicht vorstellen, dass Zend dies als _Fehler_ erkennt.
Falls doch, wäre Zend kaputt. Als _Warnung_ wäre es hingegen vollkommen
in Ordnung.
> Weiß jemand was an der Abfrage falsch ist?
Nichts.
Bei C hilft es i.d.R., die Zuweisung selber nochmal zu klammern. Unter
PHP habe ich das nie probiert. Wäre mal einen Versuch wert.
Die Zeile müsste dann lauten:
while (($row = mysql_fetch_array($result)))
Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
$result = mysql_query("SELECT id, name FROM mytable");
$anzahl = mysql_num_rows($result);
for ($i = 0; $i < $anzahl; ++$i) {
list($id, $name) = mysql_fetch_row($result);
echo "ID: $id Name: $name";
}
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 12:20:42 von Marcel Polty
Hallo Claus Reibenstein,
Claus Reibenstein schrieb:
>Du solltest Dir mal überlegen, ob Du nun indiziert oder assoziativ auf
>die Daten zugreifen möchtest. Dann könntest Du auf dieses komische
>mysql_fetch_array() verzichten und statt dessen mysql_fetch_row() bzw.
>mysql_fetch_assoc() nehmen.
>
>Diese Mischform ist irgendwie krank.
Das stamt aus dem PHP-Handbuch:
http://www.php-center.de/de-html-manual/function.mysql-fetch -array.html
>Ich kann mir nicht vorstellen, dass Zend dies als _Fehler_ erkennt.
>Falls doch, wäre Zend kaputt. Als _Warnung_ wäre es hingegen vollkommen
>in Ordnung.
Die Meldung erscheint unter "Kategorie Bug".
> while (($row = mysql_fetch_array($result)))
Ok, das klappt auch in PHP. Die Meldung kommt nicht mehr!
>Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
>
> $result = mysql_query("SELECT id, name FROM mytable");
> $anzahl = mysql_num_rows($result);
> for ($i = 0; $i < $anzahl; ++$i) {
> list($id, $name) = mysql_fetch_row($result);
> echo "ID: $id Name: $name";
> }
Und das gefällt mir ehrlich gesagt noch besser. Werd ich wohl auch
verwenden.
Danke für die Tipps Claus!
Gruß Marcel
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 13:13:50 von Frank Schenk
Claus Reibenstein schrieb:
> Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
>
> $result = mysql_query("SELECT id, name FROM mytable");
> $anzahl = mysql_num_rows($result);
> for ($i = 0; $i < $anzahl; ++$i) {
> list($id, $name) = mysql_fetch_row($result);
> echo "ID: $id Name: $name";
> }
Was für ein hirntoter Quatsch, danke für die Erinnerung, daß ich meinen
Filter adjustieren muss.
Frank
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 14:41:17 von Claus Reibenstein
Frank Schenk schrieb:
> Claus Reibenstein schrieb:
>
>> Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
>>
>> $result = mysql_query("SELECT id, name FROM mytable");
>> $anzahl = mysql_num_rows($result);
>> for ($i = 0; $i < $anzahl; ++$i) {
>> list($id, $name) = mysql_fetch_row($result);
>> echo "ID: $id Name: $name";
>> }
>
> Was für ein hirntoter Quatsch
-v
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 14:43:06 von Gregor Kofler
Claus Reibenstein meinte:
> Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
>
> $result = mysql_query("SELECT id, name FROM mytable");
> $anzahl = mysql_num_rows($result);
> for ($i = 0; $i < $anzahl; ++$i) {
> list($id, $name) = mysql_fetch_row($result);
> echo "ID: $id Name: $name";
> }
-v bitte. Oder: Was soll der Vorteil dieses "Ansatzes" gegenüber der
while-Variante sein?
Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 15:07:09 von Marcel Polty
Hallo,
Marcel Polty schrieb:
>Hallo Claus Reibenstein,
>>Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
>>
>> $result = mysql_query("SELECT id, name FROM mytable");
>> $anzahl = mysql_num_rows($result);
>> for ($i = 0; $i < $anzahl; ++$i) {
>> list($id, $name) = mysql_fetch_row($result);
>> echo "ID: $id Name: $name";
>> }
>
>Und das gefällt mir ehrlich gesagt noch besser. Werd ich wohl auch
>verwenden.
Ich denke das ist mir doch zu lang.
Ich werde bei meiner Version, aber mit den doppelten Klammern,
bleiben:
Beispiel:
$dbname="adressen";
$query="select name, ort from $dbname WHERE kdnr ='$kdnr'";
if ((!$result = @mysql_select_db($dbname))) {$err=mysql_error();
return(0);}
if ((!$result = @mysql_query($query))) {$err=mysql_error();
return(0);}
while (($row = mysql_fetch_array($result)))
{
$name = $row['name'];
$ort = $row['ort'];
}
Das dürfte den aktuellen Regeln entsprechen und wird auch von Zend
nicht reklamiert.
Gruß Marcel
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 15:08:01 von Claus Reibenstein
Gregor Kofler schrieb:
> Claus Reibenstein meinte:
>
>> Alternativ kannst Du auch _meinen_ üblichen Ansatz versuchen:
>>
>> $result = mysql_query("SELECT id, name FROM mytable");
>> $anzahl = mysql_num_rows($result);
>> for ($i = 0; $i < $anzahl; ++$i) {
>> list($id, $name) = mysql_fetch_row($result);
>> echo "ID: $id Name: $name";
>> }
>
> -v bitte.
Also _so_ kompliziert ist dieser Ansatz ja nun wirklich nicht, dass man
den noch irgendwie erklären müsste. Wenn Du den schon nicht kapierst ...
> Oder: Was soll der Vorteil dieses "Ansatzes" gegenüber der
> while-Variante sein?
Ich sehe darin weder einen Vorteil noch einen Nachteil, sondern
lediglich eine Alternative. Warum fragst Du?
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 17:27:20 von Gregor Kofler
Claus Reibenstein meinte:
> Also _so_ kompliziert ist dieser Ansatz ja nun wirklich nicht, dass man
> den noch irgendwie erklären müsste. Wenn Du den schon nicht kapierst ...
Den kapier ich schon. Deshalb kapier ich ja nicht warum du diese
Alternative vorschlägst.
> Ich sehe darin weder einen Vorteil noch einen Nachteil, sondern
> lediglich eine Alternative. Warum fragst Du?
Weil ich da nur Nachteile sehe. Zusätzliche Programmzeilen, zusätzlicher
Funktionsaufruf, zusätzliche Variable.
Gruß, Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 17:30:10 von Gregor Kofler
Marcel Polty meinte:
> Ich werde bei meiner Version, aber mit den doppelten Klammern,
> bleiben:
Warum? Die Lösung mit einer Klammer ist (genauso) korrekt. Der Zend
Analyzer weist dich auf einen *möglichen* Fehler hin. Aus. Ein Konstrukt
der Form ((...)) ist reichlich sinnfrei.
Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 18:09:10 von Michael Fesser
..oO(Frank Schenk)
>Was für ein hirntoter Quatsch, danke für die Erinnerung, daß ich meinen
>Filter adjustieren muss.
Das wolltest Du vor drei Tagen schon machen. Brauchste 'ne Skizze?
Micha
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 18:23:57 von Frank Schenk
Michael Fesser schrieb:
> .oO(Frank Schenk)
>
>> Was für ein hirntoter Quatsch, danke für die Erinnerung, daß ich meinen
>> Filter adjustieren muss.
>
> Das wolltest Du vor drei Tagen schon machen. Brauchste 'ne Skizze?
>
> Micha
Thunderbird legt die defaultmässig je Gruppe ab, ich hab das nun
hinbekommen, danke für die angebotene Hilfe.
gruß, Frank
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 18:41:37 von Claus Reibenstein
Gregor Kofler schrieb:
> Claus Reibenstein meinte:
>
>> Also _so_ kompliziert ist dieser Ansatz ja nun wirklich nicht, dass man
>> den noch irgendwie erklären müsste. Wenn Du den schon nicht kapierst ...
>
> Den kapier ich schon. Deshalb kapier ich ja nicht warum du diese
> Alternative vorschlägst.
Das wiederum kapiere ich nicht.
>> Ich sehe darin weder einen Vorteil noch einen Nachteil, sondern
>> lediglich eine Alternative. Warum fragst Du?
>
> Weil ich da nur Nachteile sehe. Zusätzliche Programmzeilen, zusätzlicher
> Funktionsaufruf, zusätzliche Variable.
Zusätzliche Programmzeilen müssen kein Nachteil sein. Manchmal sind sie
sogar von Vorteil. Das gleiche gilt für zusätzliche Variablen, die in
diesem Fall auch noch Infos enthalten, die sonst nicht existieren
(Anzahl der Rows, Nr. der aktuellen Row). Auch das kann ein Vorteil
sein, z.B. dann, wenn ein leeres Ergebnis gesondert behandelt werden
soll. Bei meinem Ansatz ist das einfacher zu realisieren.
Widersprechen muss ich aber bei dem zusätzlichen Funktionsaufruf: Bei
meiner Version wird einmal mysql_num_rows() aufgerufen, um die Anzahl
der Datensätze zu ermitteln. Danach wird mysql_fetch_row() genau so oft
aufgerufen, wie Datensätze vorhanden sind. Beim while-Ansatz entfällt
der Aufruf von mysql_num_rows(). Dafür muss dann aber mysql_fetch_row()
einmal mehr aufgerufen werden. Die Anzahl der Funktionsaufrufe sind also
identisch.
Letztendlich ist es aber wohl eher eine Stilfrage.
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Fehlermeldung bei: "while ($row = mysql_fetch_array($result))"
am 23.11.2006 20:59:55 von Niels Braczek
Gregor Kofler schrieb:
> Marcel Polty meinte:
>=20
>> Ich werde bei meiner Version, aber mit den doppelten Klammern,
>> bleiben:
>=20
> Warum? Die Lösung mit einer Klammer ist (genauso) korrekt. Der Zend=20
> Analyzer weist dich auf einen *möglichen* Fehler hin. Aus. Ein Konstr=
ukt=20
> der Form ((...)) ist reichlich sinnfrei.
Es sagt: "Ich weiß, dass hier eine potenzielle Fehlerquelle liegt und
mache das bewusst so.". Also nicht sinnfrei.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------