Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „php/mysql einmal oder öfter mit DB verbinden?“

Dimitrj

Nicht mehr ganz neu hier

Hi Leute

Ich würde mir einige Argumente bezüglich sicherheit, performance, programmierfreundlichkeit wünschen zur Frage:

Bevorzugt ihr es am Anfang eines Scripts mit der DB zu connecten, so dass alle funktionen etc. immer connected sind und das nicht erneut tun müssen?

Oder bevorzugt ihr es, nach jeder db-Anfrage die Verbindung wieder zu schliessen und wieder neu zu öffnen, wenn ihr das nächste Mal eine Abfrage macht?

Gruss,
Dimitrj
 

d0xId

Nicht mehr ganz neu hier

AW: php/mysql einmal oder öfter mit DB verbinden?

Alos ich mach es meistens so dass ich die Verbindungsdaten inner externen php Datei mach und diese dann wo ich was mit der Daenbank mache einfach am Anfang des Scriptes include.
Ob es sicher oder das sicherste ist weiss ich nicht. Aber ich finds am bequemsten.
 

fragg3d

Noch nicht viel geschrieben

AW: php/mysql einmal oder öfter mit DB verbinden?

definitiv einmal - alles andere wäre kontraproduktiv/schelcht/pfusch

grund: in min 90% der fälle nimmt der connectvorgang zur datenbank mehr zeit in anspruch als das restliche php-skript.

ausnahmen (ich kann mir grad keine vorstellen) sind sicher möglich aber generell gilt: einmal einloggen -> all seine arbeit verrichten -> ausloggen


gibt noch die möglichkeit der statischen mysql verbindung: der webserver hält sich da quasi den ganzen tag lang mit der db verbunden. muss man nicht unbedingt nehmen wenn man keine performanceprobleme hat

edit:
1. sicherheit: wenn man sich öfters einloggt kann ein böser mensch theoretisch auch öfters beim einloggen zuhören/zusehen.
2. performance: einloggen braucht am meisten zeit von daher je mehr mysql_connect desto schlechter die performance
3. programmierfreundlichkeit: jedes mysql_connect das ich tippen muss ist arbeit für mich - Arbeit ist nicht mein Freund
 
Zuletzt bearbeitet:

Dimitrj

Nicht mehr ganz neu hier

AW: php/mysql einmal oder öfter mit DB verbinden?

Cool, vielen Dank!

Perfekt beantwortet, keine weiteren Fragen euer Ehren :D
 

Niels85

Noch nicht viel geschrieben

AW: php/mysql einmal oder öfter mit DB verbinden?

Das wird jetzt etwas länger so ne Art vorschlag und diskusionsrunde (tut).

Ich verbinde mit der Datenbank immer seperat.

Zu jeder php seite wo eine Verbindung oder Abfrage entsteht binde ich eine selbst geschriebe Funktion ein mit require.

die Funktion heißt bei mir phpfunction.inc
sieht so aus
PHP:
<?php
//Daten um sich mit der Datenbank zuverbinden
function getdbconndata(&$dbserver,&$dbuser,&$password,&$dbname){
  $dbserver="SERVER"; // meistens localhost
  $dbuser="DEINNAME";
  $password="DEINPASSWORT";
  $dbname="DATENBANKNAME";
  }
function DBCONNECT($autocommit)
{
      getdbconndata($dbserver,$dbuser,$password,$dbname);
      $link = mysqli_connect($dbserver,$dbuser,$password, $dbname);
      mysqli_set_charset($link,"utf8");
      mysqli_autocommit($link, $autocommit);
      return $link;
}
function DBEXECUTE($link,$sql)
{
  $retval=false;
  if (mysqli_query($link, $sql)) {
    $retval=true;
  }
  return $retval;
}
function DBGET($link,$sql,&$data=0)
{
unset($_SESSION['dbdata']);
if(($data==0))
  $_SESSION['countdbdata']=0;
if ($result = mysqli_query($link, $sql)) {
if(($data==0))
  $_SESSION['countdbdata'] = mysqli_num_rows($result);
    /* fetch associative array */
    if($data!=0){
    while ($row = mysqli_fetch_assoc($result)) {
                $data[] = $row;
    }
    }
    else{
    while ($row = mysqli_fetch_assoc($result)) {
                $_SESSION['dbdata'][] = $row;
    }
    }
    /* free result set */
    mysqli_free_result($result);
}
}
function DBAFFECTEDROWS($link)
{
  $retval=mysqli_affected_rows($link);
  return $retval;
}
function DBCOMMIT($link)
{
  mysqli_commit($link);
}
function DBROLLBACK($link)
{
  mysqli_rollback($link);
}
function DBCLOSE($link)
{
  mysqli_close($link);
}
function EXECUTESQL($sql)
{
  $retval=false;
  getdbconndata($dbserver,$dbuser,$password,$dbname);
     $link = mysqli_connect($dbserver,$dbuser,$password, $dbname);
mysqli_set_charset($link,"utf8");
/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
if (mysqli_query($link, $sql)===TRUE) {
  $retval=true;
}
/* close connection */
mysqli_close($link);
}
function GETDATA($sql,&$data=0)
{
      getdbconndata($dbserver,$dbuser,$password,$dbname);
      $link = mysqli_connect($dbserver,$dbuser,$password, $dbname);
mysqli_set_charset($link,"utf8");
/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
if(($data==0)){
 unset($_SESSION['dbdata']);
  $_SESSION['countdbdata']=0;
}
if ($result = mysqli_query($link, $sql)) {
if(($data==0))
$_SESSION['countdbdata'] = mysqli_num_rows($result);
    /* fetch associative array */
    if($data!=0){
    while ($row = mysqli_fetch_assoc($result)) {
                $data[] = $row;
    }
    }
    else{
    while ($row = mysqli_fetch_assoc($result)) {
                $_SESSION['dbdata'][] = $row;
    }
    }
    /* free result set */
    mysqli_free_result($result);
}
//else echo "----".mysqli_error($link)."------";
/* close connection */
mysqli_close($link);
}
?>

sieht jetzt viel aus aber mit dieser Funktion kann man nun sachen aus der Datenbank lesen und schreiben. zeigen tu ich das in der nächsten daten.

oben hab ich ja schon gesagt das ich eine php datei habe nennen wir sie ausgabe.php mit dieser Datei will ich irgendwas aus der Datenbank auslesen.

Die Datei sieht wie folgt aus.

PHP:
<?php
 session_start();
 $_SESSION['serverroot'] = $_SERVER['DOCUMENT_ROOT'];
 //hier bindet ihr die phpfunction.inc ein 
 require "".$_SESSION['serverroot']."/psd-tut/phpfunction.inc";
 $dummy="ä";
//in $sql wird die datenbankabfrage abgelegt die ausgeführt werden soll 
$sql="select * from name";
//hier in beispiel nenn ich es mal name ist aber egal wie es ihr nennt. in ihr werden die kompletten datengespeichert die die abfrage aus $sql aus der Datenbank holt.
 $name=array();
//GETDATA ist eine Funktion aus phpfunction.inc die daten aus der datenbank ausliest.
 GETDATA($sql,$name);
 echo "Eintr&auml;ge ".count($name)."<br>";
 for ($i=0;$i<count($name);$i++)
 {
  echo $i.".Name: ".$name[$i]['vorname']." ".$name[$i]['vorname']."<br>";
 }
//nun könnte ihr mit dem Array alles anstellen mit print_r könnt ihr euch das array ausgeben lassen.
     print_r($name);
?>

So bis dahin kann man nun sachen aus der Datenbank lesen.
Vorteil ist der ganzen Sache ist, dass ihr eigentlich nun nur drei Zeilen braucht um Sachen auszulesen.
PHP:
 $sql="select * from irgendwas";
 $ausgabe=array();
 GETDATA($sql,$ausgabe);
 
Zuletzt bearbeitet:

Niels85

Noch nicht viel geschrieben

AW: php/mysql einmal oder öfter mit DB verbinden?

Um nun sachen zu speichern müsst ihr einmal ein Formular oder so haben.

PHP:
<form action="speichern.php" method="post">
<input type="text" id="VORNAME" name="VORNAME" value="ihr Vorname" />
<input type="text" id="NACHNAME" name="NACHNAME" value="ihr Nachname" />
<input type="submit" value="Speichern">
 </form>

ich denke mal das ist selbst erklärend nun kommen wir zu speichern.php
PHP:
 session_start();
 // in dbfunction.inc wird angeben was mit der Übergabe der Daten passieren     soll dazu später
 require $_SERVER['DOCUMENT_ROOT']."/dbfunction.inc";
 require $_SERVER['DOCUMENT_ROOT']."/phpfunction.inc";
 $link=DBCONNECT(false);
 $success=true;   
 // hier wird einmal alles angegeben was in dem formular eingeben wurde
    foreach ($_POST as $varname => $varvalue) {
        $data[$varname]=$varvalue;
        echo $varname."=".$varvalue."<br>";
    } 
    //Hier passiert das wesentliche USERSPEICHERN ist wieder ein funktion    die   in dbfunction steht. hier im Beispiel sind die VORNAME und NACHNAME die ID oder NAME typen aus dem inputfeld aus dem formular.
    $sql=USERSPEICHERN(
        array(":VORNAME",":NACHNAME"
         ),
         array($data['VORNAME'],$data['NACHNAME']
          ),$SQLID
       );
    // dieses echo soll einmal den SQL-Befehl aus dbfunction ausgeben zur     fehler kontrolle , diesen kann man sonst kopieren und dann unter phpmyadmin testen.
    echo $sql;     
  //hier wird der SQL-Befehl ausgeführt
  if ($success)$success=DBEXECUTE($link,$sql);
  if ($success)echo "Speichern hat geklappt<br>";
  if($success)
      DBCOMMIT($link);
  else
      DBROLLBACK($link);
      DBCLOSE($link);
//so wenn $success immer noch true ist, hat alles geklappt und man kann nur zum Beispiel eine weiterleitung machen wo steht ihr Name würde gespeichert oder sonst was egal man hat so viele möglichkeiten.
  if ($success){
    echo "<script type=\"text/javascript\">";
    echo "location.href='weiterleitung.php';"; 
    echo "</script>";   
   }                 
 
?>

in dbfunction werden die SQL-Befehle in functions angegeben.
PHP:
<?php
//hier können beliebige functionen auftauchen
 
//USERSPEICHERN wird in speichern.php aufgerufen in an diese Funktion werden die daten aus dem Formular übergeben.
function USERSPEICHERN($param,$value) {
  $sql="insert into irgendwas (vorname, nachname)
  values (':VORNAME', ':NACHNAME')";
  $retval=str_replace($param,$value,$sql);
  return $retval;
 }
?>

So das war dann auch schon, mit PHP kann man dann alles möglich anstellen und alles ist erweiterbar.

Ich hab es eben kurz geschrieben, ist vielleicht alles ein bißchen durch einandern aber ich hoffe ihr könnt damit was anfangen.
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.188
Beiträge
2.582.071
Mitglieder
67.257
Neuestes Mitglied
Can Ergin
Oben