webForumDet fria alternativet

PHP: smidig funktion för databas hantering?

5 svar · 475 visningar · startad av Sjodahl

SjodahlMedlem sedan maj 20033 218 inlägg
#1

Hej!

Lite nyfiken på hur ni brukar sköta era databas kopplingar. Står lite still kommer inte riktigt på hur jag vill ha det. Men brukar vara något i stil med detta:

En fil med alla funktioner, i denna includar jag min dBsettings.php, sen includar jag min funktions fil på alla sidor där jag behöver dem.

Men tycker jag brukar få lite för många funktion. Har tex en följande:

set_nickname
get_nickname
set_ex2
get_ex2

Men borde väl kunna räcka med en för update,insert,from,delete?
Ser inget smart sätt att skriva dem på just nu, så lite tips och ideer tack!

:bire

CompusaMedlem sedan jan. 20023 327 inlägg
#2

Kör du objekt-orienterat är det att rekommendera. Klassen ska beskriva objektets egenskaper och dess instansvariabler bör sättas och komma åts med accessor och mutator funktioner (get och set mao). Anledningen till att du har dessa är för att du enligt god oo-design bör undvika att göra för stora delar av en klass struktur tillänglig utifrån.

SjodahlMedlem sedan maj 20033 218 inlägg
#3

hmm låter vettigt ;)

Man kan inte få lite mer kod förslag typ?
Eller ngn bra länk ?

mmmMangeMedlem sedan jan. 2005110 inlägg
#4

Jag använder mig av PDO ( http://www.php.net/manual/en/ref.pdo.php ). Sedan har jag en egen klass med lite förenklade funktioner. TYp såhär:

    class DBObject extends PDO{

        public function GetAsArray( $SQL_Query ){
            $Params = func_get_args();
            $result = $this->query(  $this->BuildQuery( $SQL_Query, array_slice($Params, 1) )  );

            if( $this->errorCode() == '00000' ){
                $rows = $result->fetchAll(PDO::FETCH_COLUMN, 0);
                $result->closeCursor();
            }
            else{
                $rows = array();
            }

            return $rows;
        }

        public function GetFirstRow( $SQL_Query ){
            $Params = func_get_args();
            $result = $this->query(  $this->BuildQuery( $SQL_Query, array_slice($Params, 1) )  );

            $row = array();
            if( $this->errorCode() == '00000' ){
                $row = $result->fetch(PDO::FETCH_ASSOC);
                $result->closeCursor();
            }

            if( $row === array() ){
                return False;
            }
            else{
                return $row;
            }
        }

        public function GetFirstValue( $SQL_Query ){
            $Params = func_get_args();
            $result = $this->query(  $this->BuildQuery( $SQL_Query, array_slice($Params, 1) )  );

            $value = NULL;
            if( $this->errorCode() == '00000' ){
                $value = $result->fetchColumn(0);
                $result->closeCursor();
            }

            if( $value === NULL ){
                return False;
            }
            else{
                return $value;
            }
        }
}

Lite smidigare att köra

print $DB->GetFirstValue('SELECT username FROM users WHERE userid=?i', $_SESSION['userid']);

än nåt sånthär

$stmt = $DB->query('SELECT username FROM users WHERE userid='.$DB->quote($_SESSION['userid'], PDO::PARAM_INT));

print $stmt->fetchColumn(0);
$stmt->closeCursor();

Det finns säkert optimalare klasser än min hemmabyggda, men jag gillar den. :)

SjodahlMedlem sedan maj 20033 218 inlägg
#5

Ser ju rätt nice ut, mer sådant ;)

SjodahlMedlem sedan maj 20033 218 inlägg
#6

Så här ser mina funktioner ut idag tex:

/*-----------------------------------------------------------------------------------
function get_email_settings()
-----------------------------------------------------------------------------------*/
	function get_email_settings( $eshop_ID ){
		
		$SQL	= "SELECT * FROM eSHOP_email_settings WHERE eshop_ID='$eshop_ID'";
		$RESULT	= mysql_query ($SQL) or die(mysql_error());
		$ROW	= mysql_fetch_array($RESULT);
			
		$TEMP["eshop_ID"]       = $eshop_ID;
		$TEMP["support_mail"]	= $ROW["support_mail"];
		$TEMP["order_mail"]	 = $ROW["order_mail"];
	
		return $TEMP;

	}
/*-----------------------------------------------------------------------------------
function set_email_settings()
-----------------------------------------------------------------------------------*/
	function set_email_settings( $SETTINGS ){

		$eshop_ID	= $SETTINGS["eshop_ID"];
		$support_mail	= $SETTINGS["support_mail"];
		$order_mail	= $SETTINGS["order_mail"];

		$SQL = "UPDATE eSHOP_email_settings SET support_mail='$support_mail', order_mail='$order_mail' WHERE  eshop_ID='$eshop_ID'";

		$RESULT	= mysql_query ($SQL) or die(mysql_error());
	}
127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)