kostenloser Webspace werbefrei: lima-city


Datenabfrage auf db dauert ewig lang...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mymarkt

    mymarkt hat kostenlosen Webspace.

    Hallo alle zusammen

    Vermutlich mache ich etwas ganz falsch, was für Euch total einfach ist.
    Ich mache eine Datenbankabfrage für zwei Duzend Datensätze welche über 24 Sekunden dauert.
    Folgenden Code habe ich:

    in der Datei ns_login.inc
    -------------------------


    <?php
    // Verbindungsdaten
    $srv = 'MeinServer';
    $dba = 'meineDatenbank';
    $usr = 'meinBenutzer';
    $paw = 'meinPasswort';

    // Mit Server Verbinden
    $conn = mysql_connect($srv,$usr,$paw);
    if (!$conn) {
    die('Could not connect: ' . mysql_error());
    }

    // benutze Datenbank dba
    $db_selected = mysql_select_db($dba, $conn);
    if (!$db_selected) {
    die ('Kann die Datenbank '.$dba.' nicht benutzen : <br>' . mysql_error());
    }

    ?>


    in meiner Ausgabe.php Datei
    ---------------------------
    function ArtikelProKategorie($KatID){
    //// Artikel auflisten
    {
    //// Anzahl Artikel der aktuellen Kategorie welche ShopArtikel sind ermitteln
    $sql = 'SELECT COUNT(REC_ID) ';
    $sql2= ' FROM artikel '
    .' INNER JOIN artikel_to_kat ON artikel.REC_ID=artikel_to_kat.ARTIKEL_ID'
    .' WHERE artikel.SHOP_ID="1" AND KAT_ID ="'.$KatID.'"';
    $sql.=$sql2;

    1--> include 'ns_login.inc';
    $result = mysql_query($sql,$conn);
    2--> mysql_close($conn);

    $anzahl = mysql_fetch_row($result);

    //// Wenn in der aktuellen Kategorie Artikel vorhanden sind, diese auflisten
    {
    if($anzahl[0]>0){
    getKategorieHeader($KatID);
    $sql = 'SELECT artnum,artikel_id,kat_id ';
    $sql.=$sql2;
    3-->
    include 'ns_login.inc';
    4--> $result = mysql_query($sql, $conn);
    mysql_close($conn);
    while ($row = mysql_fetch_row($result)) {
    getArtikelZeile($row[0]);
    }
    getKategorieFooter();
    }
    }
    }


    Da die Function mehrfach aufgerufen wird, werden auch die vier Zeilen mehrfach durchlaufen. Wenn ich aber die Verbindung nicht schliesse als0 2--> und 3--> weg lasse, reklamiert er beim zweiten mysql_query.

    Was mache ich falsch?

    Vielen lieben Dank für Hilfestellung
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hey mymarkt.

    Ich kann dir leider nicht so recht folgen. Wieso bindest du denn ns_login.inc mehrfach ein? Das heißt ja du machst die Verbindung immer wieder auf, überschreibst die alte und schließt das dann auch noch? Wieso nicht auf einer Verbindung arbeiten und nur oben 1x includen?

    Und schau dir doch bitte MySQLi mal an. Ja, das i am Ende ist beabsichtigt. Das ist die neuere, verbesserte (i steht für improved) Version - Ob das auch deinen Geschwindigkeitsverlust ausmacht kann ich dir aber leider nicht sagen ..
  4. Hallo mymarkt,

    eigentlich hast Du dein Problem schon gut zusammengefasst, aber leider offensichtlich nicht wirklich erkannt.
    Andauern der Verbindung zur DB zu kappen und wieder zu öffnen ist aber nicht die Lösung, sondern höchsten ein Workaround der sich aber in den von Dir geschilderten schlechten Performancewerten niederschlägt.

    Dein Problem liegt bei der generellen Verwendung von Functionen:
    Dir ist offensichlich nicht klar, daß Du innerhalb von Funktionen die vorher von Dir gefüllten Variablen nicht ohne weiteres verwenden kannst!
    Schau dir hierfür mal folgendes an:
    http://php.net/manual/de/language.variables.scope.php

    Konkret heisst das für Dich:
    1) den PHP-Befehl global verwenden, damit u.a. Deine DB-Verbindungsparameter auch innerhalb der Function nutzbar sind
    2) die ganzen DB-Mehrfachaufrufe rausschmeissen (1x reicht!)
    3) nochmal testen -> sollte dann schon deutlich schneller laufen!
    4) MySQL-Befehle sind in PHP bereits als "deprecated" gesetzt und werden in der nächsten PHP-Version rausfliegen, also musst Du wohl oder Übel Deinen Code auf MySQLi-Befehle umstellen müssen

    Gruss Dunkeltuten
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!