Datenbankzugang MDB2
Aus MAXcms
Inhaltsverzeichnis |
[bearbeiten] Leitfaden zur Benutzung der Datenbank-Abstraktionsklassen in MAXcms
[bearbeiten] Allgemein:
[bearbeiten] Globale Instanz:
global $cmsDB;
oder
$GLOBALS['cmsDB'];
[bearbeiten] Abstrakte Feldtypen:
| text | Text bis 4000 Byte (Vorsicht Multibyte-Zeichen: Maximal 1000 4-Byte-Zeichen) | |
| decimal | Alle decimal Felder gleiche Nachkommastellenanzahl; Lieber float nehmen | |
| integer | Längenangaben 1, 2, 3, 4 und 8 erlaubt; Feldlänge 1 z.B. Ersatz für boolean | |
| float | Geeignet für die MySQL Typen float und double; Feldlängenangabe nicht erlaubt | |
| date | YYYY-MM-DD; Nicht vorhandenen Werte sollten durch "null" repräsentiert werden | |
| time | HH:MI:SS; Nicht vorhandenen Werte sollten durch "null" repräsentiert werden | |
| timestamp | YYYY-MM-DD HH:MI:SS; 0000-00-00 00:00:00 nicht möglich, stattdessen "null" | |
| clob | Alle Textfelder größer als 4000 Byte sollen den Typen clob nutzen | |
| blob | Gedacht für große Binärdaten |
[bearbeiten] Standard-Attribute:
| notnull | null Werte erlaubt true/false |
| length | Feldlänge |
| default | Standardwert |
| unsigned | Vorzeichen true/false (sollte nie angegeben werden) |
| fixed | Feste Länge true/false (nur für den Typen text interessant) |
[bearbeiten] Allgemeine Funktionen:
$pk = (int)$cmsDB->nextId('NAME_DER_TABELLE');
Mit dieser Funktion erhält man eine neue Sequenz, die man als PK für ein INSERT-Statement nutzen kann.
$q .= ' AND '.$cmsDB->like('FELD1', 'text', '%%BELIEBIGER_TEXT%%'[, true]).' ';
Man beachte die doppelten „%%“, die man nur dann benutzen muss/darf, wenn man mit „queryF“ oder „manipulateF“ arbeitet (bei Nutzung von „query“ oder „manipulate“ reicht „%“). Der vierte Parameter ist optional. Wird dort „false“ übergeben, wird der Ausdruck CASESENSITIV behandelt.
$q .= ' AND '.$cmsDB->in('FELD1', $array, false, 'text').' ';
Diese Funktion ersetzt das aus MySQL bekannte „IN(WERT1, WERT2[, ...])“. Der dritte Parameter negiert den Ausdruck bei Angabe von „true“.
$concat = array(
array("','"),
array('FELD1'),
array("','")
);
$q .= $cmsDB->like($cmsDB->concat($concat), 'text', '%,'.$suchText.',%');
Dieses Beispiel zeigt die Verwendung der abstrahierter MySQL-Funktion CONCAT. Ist zu erwarten, dass mindestens eins der Felder NULL sein könnte (z.B. ein leere Beschreibung), sollte als zweiter Parameter "true" übergeben werden.
[bearbeiten] Data Definition Language:
[bearbeiten] Tabellen:
$cmsDB->tableExists('NAME_DER_TABELLE');
$cmsDB->createTable('NAME_DER_TABELLE',
array(
'FELD1' => array('type' => 'text'[, ...]),
'FELD2' => array('type' => 'text'[, ...])
[, ...]
)
);
oder
$cmsDB->checkTableMDB2('NAME_DER_TABELLE',
array(
'FELD1' => array('type' => 'text'[, ...]),
'FELD2' => array('type' => 'text'[, ...]),
[, ...]
),
array(
'createSequence' => true,
'primaryKey' => array('FELD1'[, ...]),
'indexes' => array(
array('name' => 'NAME', 'fields' => array('FELD1'[, ...]))
[, ...]
)
)
);
$cmsDB->dropTable('NAME_DER_TABELLE');
$cmsDB->renameTable('NAME_DER_TABELLE', 'NEUER_NAME_DER_TABELLE');
[bearbeiten] Felder:
$cmsDB->tableColumnExists('NAME_DER_TABELLE', 'FELD_NAME');
$cmsDB->addTableColumn('NAME_DER_TABELLE', 'FELD_NAME',
array('type' => 'text', 'length' => 10, 'fix' => false,
'default' => null, 'notnull' => false)
);
oder
$cmsDB->checkFieldMDB2('NAME_DER_TABELLE', 'FELD_NAME',
array('type' => 'text', 'length' => 10, 'fix' => false,
'default' => null, 'notnull' => false)
);
$cmsDB->dropTableColumn('NAME_DER_TABELLE', 'FELD_NAME');
$cmsDB->renameTableColumn('NAME_DER_TABELLE', 'FELD_NAME', 'NEUER_FELD_NAME');
[bearbeiten] Primärschlüssel:
$cmsDB->addPrimaryKey('NAME_DER_TABELLE', array('FELD1'[, ...]));
$cmsDB->dropPrimaryKey('NAME_DER_TABELLE');
[bearbeiten] Sequenzen:
$cmsDB->createSequence('NAME_DER_TABELLE'[, $startwertInteger]);
$cmsDB->dropSequence('NAME_DER_TABELLE');
[bearbeiten] Indizes:
$cmsDB->addIndex('NAME_DER_TABELLE',
array('FELD1'[, ...])[, 'INDEX_NAME' [, $istVolltextIndexBoolean]]
);
$cmsDB->dropIndex('NAME_DER_TABELLE', 'INDEX_NAME');
[bearbeiten] Data Manipulation Language:
[bearbeiten] Delete:
$cmsDB->manipulateF(
DELETE FROM NAME_DER_TABELLE WHERE FELD1 = %s',
array('integer'),
array($id)
);
oder
$cmsDB->manipulate('DELETE FROM NAME_DER_TABELLE WHERE FELD1 = 1');
[bearbeiten] Update:
Analog zu den DELETE-Statements sind auch INSERT- und UPDATE-Manipulationen möglich. Soll in der Manipulation jedoch ein Feld vom Typ „clob“ (oder auch „blob“) behandelt werden, ist folgendes Vorgehen einzuhalten:
$cmsDB->updateMDB2('NAME_DER_TABELLE',
array(
'FELD1' => array('integer', $id),
'FELD2' => array('clob', $langerText)
),
array(
'FELD_BEDINGUNG1' => array('integer', $bedingung1),
'FELD_BEDINGUNG2' => array('integer', $bedingung2)
)
);
Hierbei ist zu beachten, dass die Bedingungen AND-verknüpft werden.
[bearbeiten] Insert:
$pk = (int)$cmsDB->nextId('NAME_DER_TABELLE');
if($pk)
{
$cmsDB->insertMDB2('NAME_DER_TABELLE', array(
'PK' => array('integer', $pk),
'FELD1'=> array('integer', $langerText),
'FELD2'=> array('timestamp', null)
));
}
else
{
[...]
}
[bearbeiten] Data Query Language:
$res = $cmsDB->queryF(
'SELECT FROM NAME_DER_TABELLE WHERE FELD1 = %s AND FELD2 = %s',
array('integer', 'text'),
array($integer, $text)
);
oder
$res = $cmsDB->query('SELECT COUNT(FELD1) AS cnt FROM NAME_DER_TABELLE');
Das Iterieren über die einzelnen Ergebniszeilen funktioniert so:
while($rowArray = $cmsDB->fetchAssoc($res))
{
[...]
}
oder so:
while($rowObject = $cmsDB->fetchObject($res))
{
[...]
}
