Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi @all,

ich experimentiere gerade mit mysql und php.

Ich hab eine mini Datebank mit ein paar Tabellen zusammen gestellt.

Jetzt habe ich mir eine PHP-Abfrage gebastelt, die auch funktioniert, aber die Abfrage dauert mindest 15 - 20 Sekunden und dasbei 6 Zeilen:eek

Das ist der Code

<?php

// MySQL Zugangsdaten
$db_host="192.168.0.168"; // Zielhost
$db_user="dbtest"; // DatebankUser
$db_pass="test"; // DatenbankUser Passwort
$database="linuxsysteme"; // Datebankname

function print_result_table($result){
// Tabellenanfang
echo "<table border=\"1\">\n";
//echo "<table cellpadding="1" cellspacing="3" border="1">\n";
// 1. Tabellenzeile Anfang
echo " <tr>\n";
// mysql_num_fields Liefert die Anzahl der Felder in einem Ergebnis
// mit Felder sind die Namensfelder in der Tabelle gemeint
for ($i = 0; $i < mysql_num_fields($result); $i++){
echo " <th>".mysql_field_name($result,$i)."</th>\n"; // mysql_field_name() liefert den Namen des Feldes,
// der dem angegeben Feldindex entspricht. Also den Tabellennamen.
}

// 1. Tabellenzeile Ende
echo " </tr>\n";

// Alle Ergebniszeilen durchgehen
while ($row = mysql_fetch_row($result)){
// Tabellenzeilen-Anfang
echo " <tr>\n";

// Alle Spalten durchgehen
for ($i = 0; $i < mysql_num_fields($result); $i++){
echo " <td>$row[$i]</td>\n";
}

// Tabellenzeilen-Ende
echo " </tr>\n";
}

// Tabellenende
echo "</table>\n";
}

// HAUPTPROGRAMM

// Verbindung zur Datenbank aufbauen
$db = mysql_connect($db_host,$db_user,$db_pass) OR die(mysql_error());

// Datebank auswählen
mysql_select_db($database,$db) OR die(mysql_error());

/* HTML-Startcode ausgeben */
echo "<html>\n<body>\n";

/* SQL-Abfrage */
$result = mysql_query("SELECT * FROM kunde");

// Wenn die Fehlernummer != 0 ist, dann gab es einen Fehler => Fehlermeldung ausgeben
if (mysql_errno() != 0){
echo mysql_error();
}
// wenn es gab keine Fehler => Ergebnis ausgeben
else {
// Wie viele Datensätze wurden gefunden?
// Bei 0 Meldung ausgeben
if (mysql_num_rows($result) == 0){
echo "Keine Datensätze gefunden!";
}
// sonst die Funktion aufrufen
else{
print_result_table($result);
}
}

/* HTML-Endcode ausgeben */
echo "</body>\n</html>\n";
?>[/PHP]

Liegt es vielleicht daran, dass die MySQL Datebank nicht auf der gleichen Maschine läuft wie der Webserver?

Geschrieben

Ein paar mehr Informationen wären hilfreich.

Wo genau geht die Zeit verloren? Hast du das ResultSet erst nach 15 – 20 Sekunden oder ist die Verarbeitung in PHP danach so langsam. Was sagen die Log Files des MySQL Servers? Was hast du überhaupt an Systemen eingesetzt wie ist die Anbindung untereinander?

Geschrieben

Also, wenn ich die Seite aufrufe, dann wird die Datenbankabfrage gestartet und vom aufruf der Seite bis hin zur Anzeige (also zum aufbau der Tabelle) vergehen ca. 15 - 20 sec.

Logfiles habe ich noch nicht ausgewertet.

Ich hab einen SLES9 und einen SLES10 Server.

Der SLES10 Server ist ein Rechner der bei mir unter dem Tisch steht und der SLES9 ist einer unserer Linux-Test rechner.

Geschrieben

Na jetzt wäre es doch schön zu wissen wo genau die Zeit verloren geht. Deshalb wäre ein Timer nicht schlecht der dir anzeigt wo wie viel Zeit auf der Strecke bleibt.

Nach deiner Beschreibung steht der Rechner mit dem MySQL Server in deiner Unmittelbaren nähe. Ist der Datenbankserver sonst irgendwie besonders ausgelastet?

Geschrieben

In Deiner Funktion gibt es 2 "FOR" Schleifen.

In beiden Schleifen ist die Bedingung ein "$i < mysql_num_fields".

Das bedeutet:

Bei jedem Schleifendurchlauf wird diese MySQL Operation ausgeführt.

Das ist sehr schlecht.

Mach halt vorher ein "$felder=mysql_num_fields($result)" und nutze dann $felder als Bedingungwert.

Dann wird das schon schneller.

Geschrieben

Du kannst Dir den Funktionsaufruf auch ganz sparen, da im Array $row eh schon alle Felder der Abfrage enthalten sind.


// Alle Spalten durchgehen
foreach ($row as $key=>$val) {
echo " <td>".$val."</td>\n";
}
[/PHP]

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...