PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Tutorial] SQL Syntax ganz einfach


Dr. Doom
21.11.2004, 15:21
Die SQL Syntax sollte ja eigentlich für die meisten Datenbanken gelten. Leider ist sie für einen PHP Schreiber etwas ungewohnt und je nach dem, was man für eine DB benutzt sehr komplex geworden. Eine kleine Vereinfachung kann ich hier anbieten. Sie beschreibt einen einfachen Weg, umfangreiche INSERT und UPDATE Befehle festzulegen, ohne sich näher mit der SQL Syntax rumärgern zu müssen. Die Funktionen sind schon auf meinem Mist gewachsen, aber auf die Idee hat mich ein Programmierkollege gebracht. :)

Zunächst müsst Ihr Eure Datenbankklasse erweitern (ich geh mal davon aus, Ihr habt sowas):


/**
* Returns a query in sql syntax
* @input: string $type the type of the query
* @input: string $table the table name
* @input: array $sqlarray the array with all the values
* @input: string $where the where syntax of the query
* @return: string $query the complete sql query
*/
function make_sql($type, $table, $sqlarray, $where='')
{
if ($type == 'INSERT' || $type == 'REPLACE')
{
$keys = array_keys($sqlarray);
$values = array_values($sqlarray);

$keys = implode(', ', $keys);
$values = implode('\', \'', $values);

$query = $type.' INTO '.$table.' ('.$keys.') VALUES (\''.$values.'\')';
}
elseif ($type == 'UPDATE')
{
$updates = array();

while (list($keys, $values) = @each($sqlarray))
{
$updates[] = $keys.'=\''.$values.'\'';
}
$updates = @implode(', ', $updates);

if($where == '')
$where = '1';

$query = $type.' '.$table.' SET '.$updates.' WHERE '.$where;
}
else
$this->error('Wrong sql type: '.$type);

return $query;
}

Sobald der Code drin ist, könnt Ihr ganz einfach Eure INSERT/REPLACE oder UPDATE Abfragen erstellen:

INSERT:

$sqlarray = array(
'id' => '',
'name' => $GLOBALS['data']['form']['name'],
'firstname' => $GLOBALS['data']['form']['firstname'],
'street' => $GLOBALS['data']['form']['street'],
'zip' => $GLOBALS['data']['form']['zip'],
'city' => $GLOBALS['data']['form']['city'],
'phone1' => $GLOBALS['data']['form']['phone1'],
'phone2' => $GLOBALS['data']['form']['phone2'],
'mobile' => $GLOBALS['data']['form']['mobile'],
'fax' => $GLOBALS['data']['form']['fax'],
'email' => $GLOBALS['data']['form']['email'],
'created' => $gettime['sqldatetime']
);

/* Set up the insert query */
$GLOBALS['temp']['sql'] = $GLOBALS['class']['db']->make_sql('INSERT', $GLOBALS['class']['db']->prefix.'user', $sqlarray);


UPDATE:

$sqlarray = array(
'name' => $GLOBALS['data']['form']['name'],
'firstname' => $GLOBALS['data']['form']['firstname'],
'street' => $GLOBALS['data']['form']['street'],
'zip' => $GLOBALS['data']['form']['zip'],
'city' => $GLOBALS['data']['form']['city'],
'phone1' => $GLOBALS['data']['form']['phone1'],
'phone2' => $GLOBALS['data']['form']['phone2'],
'mobile' => $GLOBALS['data']['form']['mobile'],
'fax' => $GLOBALS['data']['form']['fax'],
'email' => $GLOBALS['data']['form']['email'],
);

/* Set up the insert query */
$GLOBALS['temp']['sql'] = $GLOBALS['class']['db']->make_sql('UPDATE', $GLOBALS['class']['db']->prefix.'user', $sqlarray, 'id='.$GLOBALS['data']['form']['id']);


Zurück gegeben wird jeweils die korrekte Syntax für das INSERT bzw. UPDATE und für einen PHP Programmierer ist es wahrscheinlicher übersichtlicher die Werte in ein array zu packen. Lasst Euch die $GLOBALS nicht verwirren. Ich schreib das halt immer so. :)

Viel Spass beim testen.