Datenbankzugriffe

Gesperrt
Roland
Beiträge: 70
Registriert: So 16. Nov 2003, 15:13
Wohnort: Austria
Kontaktdaten:

Datenbankzugriffe

Beitrag von Roland » Mi 27. Mai 2009, 15:00

Hallo,

gibt es Funktionen/Klassen für den Schreib-/Lesezugriff auf die Datenbank, die man bevorzugt verwenden sollte und evtl. auch warum. Gibt es irgendwelche Besonderheiten auf die man aufpassen sollte wenn man Formulareingaben in verschiedene Datenbanktabellen schreiben will.

Die verwendete Contenido Version ist 4.8.12

Roland
der techniker ist das kamel auf dem der kaufmann zum erfolg reitet.

MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Re: Datenbankzugriffe

Beitrag von MichFress » Mi 27. Mai 2009, 15:41

Roland hat geschrieben:gibt es Funktionen/Klassen für den Schreib-/Lesezugriff auf die Datenbank, die man bevorzugt verwenden sollte und evtl. auch warum.
Die Klasse "Db_Contenido" - weil's einfacher ist und man sich keine Gedanken über Zugangsdaten und den Verbindungsaufbau machen muss.
Roland hat geschrieben:Gibt es irgendwelche Besonderheiten auf die man aufpassen sollte wenn man Formulareingaben in verschiedene Datenbanktabellen schreiben will.
Nein.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)

Roland
Beiträge: 70
Registriert: So 16. Nov 2003, 15:13
Wohnort: Austria
Kontaktdaten:

Re: Datenbankzugriffe

Beitrag von Roland » Do 28. Mai 2009, 16:20

Danke für die Antwort!
Habe mir jetzt mal eine Klasse auf Basis der Klasse ItemCollection (class.genericdb.php) gebastelt, welcher ich einen Tabellennamen und den Primärschlüssel übergebe. Als Beispiel diente mir die class.newsletter.recipients.php von HerrB.
Scheint für meine Zwecke ganz gut zu funktionieren. So ist es mir jetzt möglich in einem Modul mit einem Zweizeiler einen Datensatz in einer meiner Tabellen zu erstellen.

Hier mal etwas Code:

Code: Alles auswählen

<?php

 if(!defined('CON_FRAMEWORK')) {
	die('Illegal call');
}

cInclude("classes", "class.genericdb.php");

/**
 * class for onTrain Collections
 */
class onTrainCollection extends ItemCollection {

    /**
     * Constructor Function
     * @param string $table: table to use as source
     * @param string $key: the name of the primary key from $table
     */
	function onTrainCollection($table, $key)
	{   
		global $tblName, $id;
		$tblName = $table;
		$id = $key;
		
		parent::ItemCollection($table, $key);
		$this->_setItemClass("onTrainItem");
	}

	/**
     * Loads an item by its ID (primary key)
     * @param $itemID integer Specifies the item ID to load
     */	
	function loadItem ($itemID)
	{
		$item = new onTrainItem();
		$item->loadByPrimaryKey($itemID);
		return ($item);
	}
	
    /**
     * Checks if a specific user already exists
     * @param $field: specifies the field name in which to search for $value
     * @param $value: specifies the search value 
     */	
	function Exists ($field, $value)
	{
		global $client;
		
		$oonTrainCollection = new onTrainCollection;
		
		$oonTrainCollection->setWhere("idclient", $client);	
		$oonTrainCollection->setWhere($field, $value);
		$oonTrainCollection->query();
		
		if ($oItem = $oonTrainCollection->next())
		{
			return ($oItem);
		} else {
			return false;	
		}		
	}
	
	/**
     * Creates a new dataset
     * @params $arrFields: is an array with the table field names and the value for each field
     */		
	function create ($arrFields)
	{
		global $client, $lang;
		
		$item = parent::create();

		foreach($arrFields as $field => $value) {
			echo'<p>$field is: '.$field.'&nbsp; $value is: '.$value.'</p>';
			$item->set($field, $value);
		}
  		
		$item->store();
		
		return $item;
	}	
}

/**
 * Single onTrain Item
 */
class onTrainItem extends Item {
	
    /**
     * Constructor Function
     * 
     */
	function onTrainItem()
	{
		global $tblName, $id;
		
		parent::Item($tblName, $id);
	}	
}
?>
Um Daten in zwei Tabellen zu schreiben, welche über das Feld idWorkout 1:n verknüpft sind, führt man im Modul folgenden Code aus:

Code: Alles auswählen

$oWorkouts = new onTrainCollection ($cfg["tab"]["workouts"], "idWorkout");
$oWorkout = $oWorkouts->create ($arrWorkout['workout']); 
  
$idWorkout = $oWorkout->get("idWorkout");
$arrWorkout ['endurance'] ['idWorkout'] = $idWorkout;
                    
$oEnduranceRuns = new onTrainCollection ($cfg["tab"]["workouts_endurance"], "idEndurance");
$oEnduranceRun = $oEnduranceRuns->create ($arrWorkout['endurance']);
Damit erspare ich mir das Zusammenstellen dieser ewig langen INSERT INTO Abfragen, die mir ziemlich auf den Wecker gehen.

Gruß,
Roland
der techniker ist das kamel auf dem der kaufmann zum erfolg reitet.

Gesperrt