Alex: Funktionen

Hallo!

Kann mir jemand sagen, was hieran falsch ist:

<<Datei 1>>

<?
function DataBaseOpenConnection()
{
  $DataBaseConnection=mysql_connect("localhost","SchumacherA","password");
  mysql_select_db("vub_ir",$DataBaseConnection);
}

function DataBaseExecuteQuery($query)
{
$Result_query=mysql_query($query,$DataBaseConnection);
$Result=mysql_fetch_array($Result_query);
}
?>

<<Datei 2>>

<?
DataBaseOpenConnection();
DataBaseExecuteQuery($query="SELECT id,teaser FROM aktuelles ORDER BY id DESC");
?>

Danke!

Alex

  1. wie wärs mit:

    DataBaseExecuteQuery("SELECT id,teaser FROM aktuelles ORDER BY id DESC");

    ohne "$query="

    1. wie wärs mit:

      DataBaseExecuteQuery("SELECT id,teaser FROM aktuelles ORDER BY id DESC");

      Und wie komme ich dann ans Ergebnis?

      1. wie wärs mit:

        DataBaseExecuteQuery("SELECT id,teaser FROM aktuelles ORDER BY id DESC");

        Und wie komme ich dann ans Ergebnis?

        Meine Güte Checkov,

        function DataBaseExecuteQuery($query)
        {
        $Result_query=mysql_query($query,$DataBaseConnection);
        $Result=mysql_fetch_array($Result_query);
        }

        $Result ist das Ergebnis
        net die $query

        1. entweder vorher $Result global definieren oder zurückgeben, ich glaube mit return ($Result), must mal kucken.

          1. Lass die beiden Funktionen weg und arbeite direkt mit den mysql-funktionen, das ist dann nicht so ein performance-killer von unnötigen calls:
            in db_data.php sind die daten für die datenbank enthalten!

            kleiner auszug:
            include("db_data.php");
                 include("error.php");
                 $con=mysql_connect ( $host, $user, $pw );
                 if($con){
                     $sql="SELECT sparte_id, text FROM t_downloads WHERE id = $fid;";
                     if( $erg=mysql_db_query($db_name, $sql, $con) ){
                      list($sparte,$text)=mysql_fetch_row($erg);
                      $s_sparte=$sparte;
                      $s_text=$text;
                      $sql="SELECT f.file_name, f.file_size, f.file_date FROM t_downloads d, t_files f";
                   $sql.=" WHERE d.id = $fid AND d.id = f.down_id;";
                   if( $erg=mysql_db_query($db_name, $sql, $con) ){
                 while( $zeile=mysql_fetch_row($erg) ){
                  if( isset($s_filetab) ){
                   array_push($s_filetab,$zeile);
                  }
                  else{
                   $s_filetab=array($zeile);
                  }
                 }//while
                }//if erg
                     }//if erg
                     mysql_close ($con);
              }//if con

        2. Meine Güte Checkov,

          function DataBaseExecuteQuery($query)
          {
          $Result_query=mysql_query($query,$DataBaseConnection);
          $Result=mysql_fetch_array($Result_query);
          }

          $Result ist das Ergebnis
          net die $query

          Und wie soll ich denn dann das Ergebnis der Query in das Array packen, wenn es nicht in einer Variablen gespeichert ist?

          1. Meine Güte Checkov,

            function DataBaseExecuteQuery($query)
            {
            $Result_query=mysql_query($query,$DataBaseConnection);
            $Result=mysql_fetch_array($Result_query);
            }

            $Result ist das Ergebnis
            net die $query

            Und wie soll ich denn dann das Ergebnis der Query in das Array packen, wenn es nicht in einer Variablen gespeichert ist?

            Ich hab' zwar keine Ahnung von DBs, aber wenn Query = $query ist,
            wird es zuerst nach $Result_query übergeben und landet dann in
            $Result, welches ein Array ist, wie ich aus dem MySql-befehl schließe.

            Tschüß, Auge

  2. Kann mir jemand sagen, was hieran falsch ist:

    [snip]

    Was kommt denn für ein Fehler? Sollen wir das jetzt raten?

    1. Was kommt denn für ein Fehler? Sollen wir das jetzt raten?

      Supplied argument is not a valid MySQL-Link resource in global_functions_inc.php

  3. <?
    function DataBaseOpenConnection()
    {
      $DataBaseConnection=mysql_connect("localhost","SchumacherA","password");
      mysql_select_db("vub_ir",$DataBaseConnection);
    }

    function DataBaseExecuteQuery($query)
    {
    $Result_query=mysql_query($query,$DataBaseConnection);

    $DataBaseConnection ist hier gar nicht bekannt (ist lokal für die Fkt. DBOpenConn()).
    Mach doch so:

    function DBOpenConn()
    {
     ...
     return $DBConn;
    }
    function DBExecQry($conn,$qry)
    {
    return $res_qry;
    }

    und dann:

    $conn = DBOpenConn();
    $qry = DBExecQry($conn,"SELECT ...");

  4. Grundlegendes zur Funktionalität!

    Wie kann man bloss so einen schrott zusammenschustern, in der praxis
    ist dieses konzept der programmierung nicht tragfähig...
    Zu sturrer Programmierstil! Hoffentlich ist dieses Skript nur zum
    privaten Gebrauch gedacht.

    Endnote:
    FETTE 6

    Hallo!

    Kann mir jemand sagen, was hieran falsch ist:

    <<Datei 1>>

    <?
    function DataBaseOpenConnection()
    {
      $DataBaseConnection=mysql_connect("localhost","SchumacherA","password");
      mysql_select_db("vub_ir",$DataBaseConnection);
    }

    function DataBaseExecuteQuery($query)
    {
    $Result_query=mysql_query($query,$DataBaseConnection);
    $Result=mysql_fetch_array($Result_query);
    }
    ?>

    <<Datei 2>>

    <?
    DataBaseOpenConnection();
    DataBaseExecuteQuery($query="SELECT id,teaser FROM aktuelles ORDER BY id DESC");
    ?>

    Danke!

    Alex

    1. Grundlegendes zur Funktionalität!

      Wie kann man bloss so einen schrott zusammenschustern, in der praxis
      ist dieses konzept der programmierung nicht tragfähig...
      Zu sturrer Programmierstil! Hoffentlich ist dieses Skript nur zum
      privaten Gebrauch gedacht.

      Endnote:
      FETTE 6

      Wie würdest du es denn programmieren?

      1. Besser natürlich,

        ich verpack jedenfalls die mysql-befehle nicht in zig verschiedenen funktionen rein.
        um eine datenbankanfrage zu machen schreib ich dafür jedenfalls keine
        function!

        <?

        function Ohh_Gott_ich_will_einen_String_fuellen($attr=''){
          $string=&$attr;
          return $string;
        }

        $ich_hab_ne_meise=Ohh_Gott_ich_will_einen_String_fuellen(";)");

        ?>

        Grundlegendes zur Funktionalität!

        Wie kann man bloss so einen schrott zusammenschustern, in der praxis
        ist dieses konzept der programmierung nicht tragfähig...
        Zu sturrer Programmierstil! Hoffentlich ist dieses Skript nur zum
        privaten Gebrauch gedacht.

        Endnote:
        FETTE 6

        Wie würdest du es denn programmieren?

        1. So, und jetzt mal was zur Funktionalität: Es ist ein ziemlich großes Projekt, an dem ich arbeite und mit vielen Datenbankzugriffen. Meinst du, ich baue jedesmal mit dem ganzen Syntaxsalat eine Verbindung zur Datenbank auf?
          Also dann finde ich meine Programmierung wesentlich hilfreicher!

          1. Moin!

            So, und jetzt mal was zur Funktionalität: Es ist ein ziemlich großes Projekt, an dem ich arbeite und mit vielen Datenbankzugriffen. Meinst du, ich baue jedesmal mit dem ganzen Syntaxsalat eine Verbindung zur Datenbank auf?
            Also dann finde ich meine Programmierung wesentlich hilfreicher!

            Mal ganz unabhängig davon, welchen qualitativen Wert die Äußerungen von GodofOPHPChecka haben:

            Deine selbstdefinierten Funktionen haben keinen wirklichen Wert. Du verkürzst nur minimal den Tippaufwand. Im einzelnen:

            1. function DataBaseOpenConnection()
            {
             $DataBaseConnection=mysql_connect("localhost","SchumacherA","password");
             mysql_select_db("vub_ir",$DataBaseConnection);
            }

            Du ersetzt zwei Funktionsaufrufe durch einen. Und das bei einer Funktion, die pro PHP-Datei ohnehin nur ein einziges Mal am Anfang ausgeführt werden muß. Wenn du dir doppelten und dreifachen Wartungsaufwand sparen willst, dann fügst du diese beiden Befehle in eine Include-Datei ein, die du wahlweise mit include() oder require() am Anfang jeder PHP-Datei einbindest. Und machst keine Funktion daraus. Der Vorteil ist dann, daß du auf $DataBaseConnection global zugreifen kannst, und die Variable nicht aus der Funktion herausexportieren mußt.

            Im übrigen wäre es praktisch, wenn du um diese Zeilen herum noch ein wenig Fehlerbehandlungscode platzieren würdest. Die Datenbankverbindung muß ja nicht klappen - was passiert dann? Abbruch, Fehlermeldung?

            2. function DataBaseExecuteQuery($query)
            {
            $Result_query=mysql_query($query,$DataBaseConnection);
            $Result=mysql_fetch_array($Result_query);
            }

            Auch diese Funktion nimmt dir nur unwesentlich viel Arbeit ab und tut darüber hinaus nicht, was du willst. Der eigentliche Aufruf von mysql_query ist ja schon eine Funktion - warum dann eine gesonderte Funktion schreiben? Und danach liest du _ein_ Ergebnis des Querys in eine Variable - was ist mit dem Rest der Ergebnisse? Deine Funktion ist in dieser Form Blödsinn. Wenn du das gesamte Ergebnis in einem Array haben willst, mußt du in der Funktion in irgendeiner Art in einer Schleife die Werte abrufen und speichern, und dann das Array übergeben.

            Außerdem produzierst du noch ein Problem mit lokalen und globalen Variablen: Alle innerhalb der Funktion definierten Variablen sind lokal, gelten nur innerhalb der Funktion und sind außerhalb der Funktion nicht bekannt. Wenn du also die Datenbankverbindung herstellst, mußt du das Datenbankhandle irgendwie nach draußen liefern. Und draußen muß es dann irgendwo gespeichert werden. Das geschieht mit der Anweisung "return $Variable" in der Funktion, und mit $anderevariable=funktion(); außerhalb. Damit wird der Wert der Funktionsvariablen $Variable an die globale Variable $anderevariable geliefert. So ist es schön.

            Du kriegst dann ein Problem, wenn du mehrere Werte zurückliefern willst: Funktionen haben nur ein Ergebnis, können also nur einen Wert mit return zurückliefern. Ausweichmöglichkeiten wären: Zurückliefern eines Arrays oder Hashes (auf jeden Fall zu bevorzugen) und Zugriff auf globale Variablen (ganz ganz böse Falle, weil man damit super ins Stolpern geraten kann und die abenteuerlichsten Fehler auftreten können).

            Summa summarum: Deine Funktionen helfen (noch) nicht wesentlich weiter, haben aber aufgrund deiner Unwissenheit über den Wirkungsbereich von Variablen (lokal, global) noch ganz grundsätzliche Fehler. Ich würde vorschlagen, auf diese Funktionen zu verzichten. Die Datenbankverbindung stellst du per include/require her, um Tipparbeit zu sparen, und die Datenbankabfragen würde ich auch ohne Funktion lokal definieren. Dadurch mußt du nicht mit möglicherweise riesigen Arrays hantieren, die nur unnötig den Speicher vollmüllen, sondern kannst sehr individuell die Ausgabe des Ergebnisses programmieren, indem du in einer Schleife die Ergebnisse einzeln von der Datenbank abfragst und direkt verarbeitest.

            - Sven Rautenberg

            1. Das war jetzt endlich mal ein qualitativ hochwertiger Beitrag! Danke! Ehrlich gesagt habe ich das Skript garnicht selbst programmiert. Vorher war es mal ein Asp-Skript, das ich dann mit asp2php konvertiert habe. Das hat natürlich nicht auf Anhieb geklappt und ich musste ein paar Sachen ändern. Dabei ist mir halt aufgefallen, dass die Funktionen in einer separaten Include-Datei stehen. Deshalb hat es mich interessiert, ob es sinnvoller ist, es so zu machen oder wie ich es gewohnt bin - nämlich direkt ohne eine eigene Funktion.

              Nochmals danke!

              Alex