Zum Inhalt springen

PHP Datenbankabrage scheitert


Empfohlene Beiträge

Hi, ich bin ein Anfänger in Sachen php + mysql und versuch mir grad mit Hilfe eines Buches die Sache selbst beizubringen. Allerdings scheiter ich gerade an der ersten Datenbankabfrage.

Folgender Code:


<?
$host= "localhost";
$user= "root";
$pass= "leer";
$database= "test_db";
$dz = mysql_connect($host, $user, $pass);
mysql_select_db($database, $dz);
?>

<html>
<head></head>
<body>
<?
$sql = mysql_query("select * from test_db");
while ($ds = mysql_fetch_object($sql)) {
$id = $ds -> ID;
$name = $ds -> NAME;
$vorname = $ds -> VORNAME;
echo $id, $vorname, $name, "<br>";
}
mysql_close($dz);
?>
</body>
</html>[/PHP]

Ergibt Folgende Meldung:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\abfrage.php on line 7

Was sagt mir das? Bzw. was habe ich falsch gemacht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

eine tabelle in html kennst du ja, nehm ich mal an...

<table>

<tr>

<td>Zeile 1 - Spalte 1</td>

<td>Zeile 1 - Spalte 2</td>

<tr>

<tr>

<td>Zeile 2 - Spalte 1</td>

<td>Zeile 2 - Spalte 2</td>

<tr>

<table>

das einzige, was du hier brauchst, ist eine schleife, die dir deine ganzen daten in zeile/spalten packt. wie du sicherlich weißt, kannst du auch mit zb.


echo "<b>fetter text</b>";
[/PHP]

html-code schreiben.

so musst du mit allen html-tags umgehen, die du mit php-hilfe ausgeben möchtest.

bei einer tabelle muss dann somit "<table> </table>" gesetzt sein, du benötigst es nur ein einziges mal. "<tr></tr>" als zeile (mit beliebig vielen spalten <td></td>) muss mehrmals generiert werden.

das grobe muster:

[PHP]
echo "<table>";
#SCHLEIFE
{
echo "<tr>";
echo "<td>bisschen text</td>"; // hier müssen die variablen eingesetzt werden!!
echo "<td>noch mehr text</td>"; // hier müssen die variablen eingesetzt werden!!
echo "<tr>";
}
echo "</table>";

für die #SCHLEIFE fügst du folgendes ein: while ($ds = mysql_fetch_object($sql)) << dies liefert dir die datenzeilen! die schleife generiert zeile für zeile in deiner tabelle. falls die schleife beendet ist, wird der end-tag der tabelle gesetzt.

korrekt und etwas vereinfacht


echo "<table>";
while ($ds = mysql_fetch_object($sql))
{
echo "<tr><td>$ds->NAME;</td>";
echo "<td>$ds->VORNAME;</td><tr>";
}
echo "</table>";
[/PHP]

soweit alles klar?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie lang sollten eigentlich Datenbank abfragen dauern?

Ich lerne mir die Sachen an um sie mal produktiv einzusetzen. Bin derzeit auch schon an meinem ersten Fall dran und muss für die Inventur ne Liste erstellen.

Da habe ich 4 Tabellen. Tabelle 1 und 2 ca. 50000 einträge, Tabelle 2 ca. 25000 einträge und Tabelle 3 nur 12 Einträge.

Aus diesen Tabellen muss ich eine Liste erstellen.

Wenn ich diese Anfrage anschiebe steigt die CPU belastung meines Notebookes auf 50% und es passiert gar nichts. Nach ein paar Minuten bricht die Sache ab.

Hier mal die Abfrage. Vielleicht kann man die auch noch etwas optimieren:


select LG3_d.TEILENR, t01_d.TEILEBEZ1,t01_d.TEILEBEZ2,T02_D.LPLATZ, LG3_D.SOLLINVBEST, mengschl.mengenbez
from t01_d, lg3_d, t02_d,mengschl
where t01_D.TEILENR = lg3_d.TEILENR
and t01_d.mengenschl = mengschl.mengenschl
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

1. Relationenalgebra und SQL: Kartesisches Produkt - Wikibooks

Du stellst in deiner Abfrage t02_d z.B. nicht in relation zu den anderen Tabellen. Daher wird hier ein Kreuzprodukt erzeugt.

2. Hast du deine Abfrage einmal direkt über die MySQL Konsole getestet?

Es könnte hier z.B. sein das aufgrund der enormen Anzahl an Zeilen das PHP Skript länger als den verfügbaren Timeout benötigt, und der Browser ziemlich viel arbeit aufwenden muss um die abertausenden Tabellenzeilen in HTML tu rendern.

Um die Abfrage zu optimieren müsste man zumindest eine genauere Tabellenbeschreibung bekommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit der t02_d ist mir auch aufgefallen. Nach genauer Prüfung der einzelnen Tabellen konnte ich die benötigten Daten auch aus der LG3_D ziehen. D.h. eine Tabelle weniger.

Die komplette Liste dauert nun nur noch wenige Sekunden. :cool:

Danke für eure Hilfe bis hier hin. Werd mich zu dem Thema sicher nochmal melden. Bin grad bissl am schwitzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...