Php: mysql_result

Schönen guten Abend,

mein Problem ist folgendes..Ich habe eine Php-Datei,

a)die sich mit einem Server connecten soll,
b)die Anzahl an Datensätze ermitteln und ausgeben soll
c)die Anzahl an Felder ermitteln und ausgeben soll
d) alle Datensätze sollen am Ende ausgegeben werden (und genau das klappt einfach nicht...es kommt weder zu einer Fehlermeldung, noch zu einer Ausgabe ??? Die Funktion mysql_result muss verwendet werden...

Über die Hässlichkeit des Codes bitte ich, hinwegzusehen...



PHP:
<?php


// Verbindung mit Datenbank aufnehmen:

mysql_connect("localhost", "root", "xxx");


// Datenbank auswählen

mysql_select_db("testdatenbank");


// SQl-Abfrage

$res = mysql_query("select * from personen");


// Anzahl Datensätze ermitteln und ausgeben:


$anz_zeilen = mysql_num_rows($res);
echo "<b>Anzahl an Datensätze:</b> " . $anz_zeilen;


//Anzahl Spalten ermitteln und ausgeben:

$anz_spalten = mysql_num_fields($res);
echo "<br><b>Anzahl Felder:</b> $anz_spalten";


// Alle Daten ausgeben


for($x = 0; $x <anz_zeilen; $x++) {

 echo "<br>";
 for ($y = 0; $y <anz_spalten; $y++) {
  echo mysql_result($res,$x,$y);
  }
}






?>
 
Zuletzt bearbeitet:
warum so kompliziert? :)

PHP:
//connecten zur db wie du es gemacht hast
[...]

$res = mysql_query("SELECT * FROM DB");
while($row = mysql_fetch_array($res)) {
  for($i=0, $c = count($row); $i < $c; $i++) {
     echo $row[$i];
  }
  echo "<br />";
}

ansonst, was an deinem code der fehler ist:

du fragst mit mysql_result($result,$zeile,$spaltenname) die daten ab, durch die zählschleife wird da aber auf zahlen zugegriffen die es wahrscheinlich schlichtweg nicht gibt.

ansonst poste mal die fehlermeldung, das wäre wesentlich hilfreicher :)
 
Warum so kompliziert? Ich besuche zur Zeit die letze Klasse eines Gymnasiums und unser Lehrer wünscht, dass diese (ich weiß eigentlich sehr ineffiziente und langsame Funktion, die eigenlich niemand mehr benutzt) verwendet wird, deshalb brauche ich auch eine Umsetzung mit der Funktion mysql_result....

Dass die Zählschleife auf Parameter zugreift, die nicht existent sind, halte ich eigentlich für unwahrscheinlich ?
Ich dachte die Funktion würde so funktionieren:
mysql_result(zeilenparameter, Spaltenparameter)

...wenn dem so ist, müsste das zugreifen auf nicht vorhandene Zahlen eigentlich ausgeschlossen sein und auch auf anderen Seiten habe ich diese Umsetzung gesehen ?
Ich kanns mir momentan einfach nicht erklären, oder ich leide an akuter Blindheit, jedenfalls raubt es mir jetzt schon längere Zeit die nerven und wird mich wohl auch daran hindern, genug Schlaf zu tanken...

Zur Fehlermeldung: Es wird schlichtweg, keine Fehlermeldung ausgegeben :-(
 
Zuletzt bearbeitet:
tatsache:

Code:
Beachten Sie auch, dass die Angabe      eines numerischen Offsets für ein Feld sehr viel schneller ist als die      Angabe eines Feldnamens oder tabellenname.feldname.

wieder was gelernt, aber dennoch bleibt die frage nach der fehlermeldung, im trüben fischen mag niemand gern ;)
 
So jetzt stehe ich irgendwie vor einem großen Rätsel...
Ich habe jetzt ungefähr eine Stunde lang über dem Problem gesessen und darüber gerätselt, warum dieses Programm nicht funktioniert...

Nun passiert es, dass plötzlich mein Computer abstürzt und das das Programm nach dem Hochfahren auf einmal einbandfrei funktioniert (Code ist immer noch gleich ...)

:P Ich muss sagen, das verwundert mich doch sehr...
 
So das Problem scheint zwar gelöst zu sein, aber der Ausgang lässt mich nicht ruhig schlafen...

Ich habe nun den hier geposteten Code noch einmal in eine .php Datei kopiert und versucht, diese auszuführen (name datenbank3.php=
==> Ergenis: Nur Anzahl an Datensätze und Spaltenzahl wird ausgegeben...:-(


Führe ich nun aber meine Datei datenbank1.php aus, funktioniert alles so, wie es schon seit Stunden funktionieren sollte...
Das ist ja schön und gut, werdet ihr jetzt denken, dann sind die Datein eben nicht identisch, aber = Ich habe die beiden Dateien 2x verglichen und mir ist nicht eine einzige minimale Abweichung aufgefallen und zusätzlich habe ich mir ein Programm heruntergeladen, das zwei Dateien miteinander vergleicht, und eben dieses Programm, hat die beiden Dateien für identisch befunden....so langsam bin ich echt verzweifelt (hinbekommen habe ich es nun ja aber ich will einfach wissen, was der Grund dafür war und ich komme momentan nicht drauf...vielleicht sollte ich auch so langsam schlafen gehen...)


Der Person, die mir hilft, dieses Phänomen aufzulösen, bin ich zu ewigem Dank verpflichtet :rolleyes:

Hier der Code von beiden Dateien :

PHP:
<?php


// Verbindung mit Datenbank aufnehmen:

mysql_connect("localhost", "root", "xxx");


// Datenbank auswählen

mysql_select_db("testdatenbank");


// SQl-Abfrage

$res = mysql_query("select * from personen");


// Anzahl Datensätze ermitteln und ausgeben:


$anz_zeilen = mysql_num_rows($res);
echo "<b>Anzahl an Datensätze:</b> " . $anz_zeilen;


//Anzahl Spalten ermitteln und ausgeben:

$anz_spalten = mysql_num_fields($res);
echo "<br><b>Anzahl Felder:</b> $anz_spalten";



// Alle Daten ausgeben

for($x = 0; $x < $anz_zeilen; $x++) {

 echo "<br>";
 for ($y = 0; $y < $anz_spalten; $y++) {
  echo mysql_result($res,$x,$y);
  }
}





?>


PHP:
<?php


// Verbindung mit Datenbank aufnehmen:

mysql_connect("localhost", "root", "xxx");


// Datenbank auswählen

mysql_select_db("testdatenbank");


// SQl-Abfrage

$res = mysql_query("select * from personen");


// Anzahl Datensätze ermitteln und ausgeben:


$anz_zeilen = mysql_num_rows($res);
echo "<b>Anzahl an Datensätze:</b> " . $anz_zeilen;


//Anzahl Spalten ermitteln und ausgeben:

$anz_spalten = mysql_num_fields($res);
echo "<br><b>Anzahl Felder:</b> $anz_spalten";


// Alle Daten ausgeben


for($x = 0; $x <anz_zeilen; $x++) {

 echo "<br>";
 for ($y = 0; $y <anz_spalten; $y++) {
  echo mysql_result($res,$x,$y);
  }
}






?>


datenbank1.php funktioniert wie gewünscht, bei datenbank3.php tritt beschriebenes Problem auf...
 
in der unteren fehlt in der zählschleife ein $ vor anzahl! ;)
da steht dann in der fehlermeldung wohl sowas wie, dass es blöd is auf die konstante zuzugreifen, weils die nicht gibt.

hättest mal die fehlermeldung gepostet hätten wir dich da wesentlich schneller draufbringen können^^
 
in der unteren fehlt in der zählschleife ein $ vor anzahl! ;)
da steht dann in der fehlermeldung wohl sowas wie, dass es blöd is auf die konstante zuzugreifen, weils die nicht gibt.

hättest mal die fehlermeldung gepostet hätten wir dich da wesentlich schneller draufbringen können^^

da sieht man doch echt den Wald vor lauter Bäumen nicht...:-(...
danke :), auch wenn es mir jetzt echt ein wenig peinlich ist, dass ich nicht in der Lage war,diesen simplen Fehler schnell zu finden...was ich nicht verstehe ist, dass das Programm, dass ich mir sogar extra noch runtergeladen hatte, diese Abweichung nicht festgestellt hat :rolleyes:


Und noch ein letztes Mal...

Es wurde einfach keine Fehlermeldung ausgegeben :-(
 
Zuletzt bearbeitet:
Es wurde einfach keine Fehlermeldung ausgegeben :-(

keine Anzeige von MySQL-Fehlern:
ganz logisch, weil du nirgendwo MySQL-Fehler abfragst.
http://www.php.net/manual/de/function.mysql-error.php
http://www.php.net/manual/de/function.mysql-errno.php

keine Anzeige sonstiger Syntax-Fehler:
weil sie möglicherweise von deiner PHP-Konfiguration unterdrückt werden
http://www.php.net/manual/de/errorfunc.configuration.php#ini.error-reporting
http://php.net/manual/de/function.error-reporting.php
 
Erstmal vielen Dank an meinen Vorposter, sollte ich morgen ein wenig mehr Zeit finden, werde ich die Links noch gebührend würdigen (was nun folgt, ist keineswegs als Kritik, sondern lediglich als Frage zu interpretieren...)

Mit deiner Ausführung keine Anzeige von Mysql Fehlern kann ich mich immer noch nicht ganz anfreunden, mein Gedankengang sah gestern wie folgt aus :

Ist wirklich eine Fehlerfunktion nötig ist, um mysql-fehler auszugeben, denn eigentlich kommt es doch immer zu einer automatischen Mysql-Fehlerausgabe, was, da es sich bei mir um einen virtuellen Server handelt, ja auch nicht gleich eine potentielle Sicherheitslücke aufwirft, was ja - so verstehe ich es jetzt zu diesem Zeitpunkt jedenfalls, ja überhaupt erst Grund für die Verwendung einer solchen Fehlerfunktion ist ==>
Sind die Fehlerfunktionen nicht viel eher ein Konstrukt um im Falle eines Datenleaks, Menschen den Einblick in das Innere der "Black Box" zu verwehren und für den Entwickler zur Fehlerfindung und Fehlerbekämpfung erstmal hintenanzustellen, da nicht notwendig und er sowieso nicht vorhat, dieses Script öffentlich zu machen ? Eigentlich müsste ich doch auch alle Mysql-Befehle ohne die Mysql-Fehlerfunctions ausgegeben bekommen ?


Zu Punkt zwei:


Ein Blick auf die php.ini hat gezeigt : error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED (also müssten alle Syntaxfehler angezeigt werden ? =

Warum kommt es aber zu keiner Fehlerausgabe obwohl im Schleifenkopf weder eine gültige variable noch eine Zahl eingetragen wurde...
Wie, bzw als was wird dann der Abschnitt < anz_spalten interpretiert, dabei müsste es sich doch um einen ungültigen Parameter handeln ==> Fehlerausgabe ???
 
Zuletzt bearbeitet:
Punkt 1:
Es ist immer gut, wenn man kritische (also unsichere) Aktionen kontrolliert, indem man auf Fehler überprüft.
Man könnte z.B. eine Funktion schreiben, die eine MySQL-Query absetzt und dann prüft, ob ein MySQL-Fehler vorliegt und dann z.B. eine Exception wirft.
Wenn du diese Funktion für alle SQL-Abfragen benutzt, kann es nicht mehr passieren, dass du MySQL-Fehler übersiehst.
Sonst kann es vorkommen, dass du irgendwo einen Sytanxfehler in einer Query hast, aber das nicht bemerkst, z.B. weil du im Normalfall eine leere Query erwartest.

Punkt 2:
PHP behandelt unbekannte Konstanten als Strings, gibt aber eine Notice aus.
Da du in deinem Error-Reporting E_NOTICE ausgeschaltest hast, wird dir nichts angezeigt und die Konstante wird als String "anz_spalten" interpretiert.
Kleiner Hinweis: Das error_reporting() erwartet eine Bitmaske, die sich aus verschiedene Werten zusammensetzt. Mit E_ALL ist hierbei alles außer E_NOTICE gesetzt. Das Verodern (|) vereinigt zwie Bitmasken, das Verunden (&) schneidet zwei Bitmasken und die Tilde (~) invertiert eine Bitmaske.
Die Bitmaske "E_ALL & ~E_NOTICE & ~E_DEPRECATED" sagt also "Alles außer E_NOTICE und E_DEPRECATED". Wenn du wirklich alle Meldungen sehen willst, setze es auf "E_ALL | E_NOTICE".

Um das Error Reporting in einem Script umzuändern, ohne die php.ini zu verändern, kannst du einfach am Anfang des Scripts folgendes aufrufen:
PHP:
error_reporting(E_ALL | E_NOTICE);

mfg, metax.
 
Zuletzt bearbeitet:
Nochmals vielen vielen Dank an dich metax., der du mir die Augen mit deinem vortrefflichen Kommentar die Augen geöffnet hast, welcher mir insbesondere in Bezug auf Punkt 2 sehr geholfen hat und die Fragen, die so in meinem Kopf herumschwirrten, erstmal alle beantwortet hat...


In diesem Sinne danke und
Notice: Use of undefined constant anz_spalten - assumed 'anz_spalten' in C:\xampp\htdocs\test\datenbank3.php on line 39

:P
 
Zuletzt bearbeitet:
Zurück
Oben