Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PHP Datenbankabrage scheitert

Empfohlene Antworten

Veröffentlicht

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?

da ich annehme, dass deine tabelle nicht test_db heißt (das ist die datenbank), muss es heißen:

$sql = mysql_query("select * from deine_tabelle"); 

du kannst nur daten aus einer tabelle abfragen... (daß eine datenbank tabellen hat ist dir ja bekannt oder?)

Am besten ist, denke ich:

Du erstellst eine HTML Tabelle so wie du sie haben willst und packst an den entsprechenden Stellen die Ausgaben aus der SQL Tabelle rein?!

  • Autor

Die Daten kommen ja aus der Schleife. Siehe oben. Ich kann doch die echo Anweisung nicht auserhalb der Schleife schreiben. Oder?

Wie lege ich fest das der für jeden Datensatz ne neue Zeile anfängt?

Du kannst ja die Tabelle "anfangen"

Dann die Schleife einbauen


<tr><td>Ausgabe....</td></tr>

Schleife zu Ende...

Tabelle zu Ende....

So hast du eine Tabelle und fügst bei jedem Durchlauf der Schleife eine neue Zeile in die Tabelle hinein...

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?

Danke trebstyle, genau so meinte ich es auch! :-)

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

Habt ihr euch eigentlich Zeile 7 mal angeschaut?

mysql_select_db($database, $dz);

Es scheint, dass der login nicht funktioniert hat.

Gruß

Habt ihr euch eigentlich Zeile 7 mal angeschaut?

Es scheint, dass der login nicht funktioniert hat.

das wurde in posting #2 bereits angemerkt und in #3 bereits behoben ;)

s'Amstel

das wurde in posting #2 bereits angemerkt und in #3 bereits behoben

Dies wurde nicht in Posting #2 und keinem weiteren angemerkt. Angemerkt wurde richtig, dass die entsprechende Tabelle falsch gesetzt war. Und dies war nicht in Zeile 7 ....

Gruß

wer sagt, dass die zeile 7 hier im quelltextauszug die echte zeile 7 ist?

wichtig ist hier eher Warning: mysql_fetch_object():, denn dieses kommt nur einmal im quelltextauszug vor. und unbegründet kommt diese warnung nicht; auch wenn hier in zeile 7 was andres steht.

lesen -> denken -> schreiben

  • Autor

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]

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.

  • Autor

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.