webForumDet fria alternativet
Logga in / Bli medlem

PHP: smidig funktion för databas hantering?

PHP

5 svar · 475 visningar · startad av Sjodahl

Medlem sedan maj 20033 218 inlägg
Trådstart#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

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

Medlem 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 ?

Medlem 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. :)

Medlem sedan maj 20033 218 inlägg
#5

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

Medlem 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());
	}
379 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
120 ms — deklarationer (db)
123 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)