Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Simple MYSQL INSERT und UPDATE    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Dreamwatcher
Mitglied
Neuling


Dabei seit: 20.03.2014
Herkunft: keine Angabe
Posts: 1
     Simple MYSQL INSERT und UPDATE Zitat | Bearbeiten

Diese beiden Funktionen machen aus einem Array einen INSERT oder UPDATE String.
Damit kann verhindert werden immer wieder Fehler in diesen Anweisungen zu haben.
Weiter unten noch die Erklärungen dazu.
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:

function mysql_insert_string($table, array $data)
{
    $columns = array_map(function($col){return '`'.$col.'`';},array_keys($data));
    $values = array_map(function($val){
        if($val===null) return 'NULL';
        if(is_numeric($val)) return $val;
        return "'".$val."'";
    },$data);
    return "INSERT INTO `".$table."` (".implode(',',$columns).") VALUES (".implode(',',$values).")";
}
function mysql_update_string($table, array $data, $primary_key_column=null, $primary_key_value=null)
{
    array_walk($data, function(&$val, $key) {
        if($val===null) $val= 'NULL';
        elseif(!is_numeric($val)) $val = "'".$val."'";
        $val= "`".$key."`=".$val; });
    $where = null;
    if(!is_null($primary_key_column))
    {
        if(is_null($primary_key_value))
        {
            $symbol = 'IS';
            $value = 'NULL';
        }
        else
        {
            $symbol = '=';
            $value = is_numeric($primary_key_value)?$primary_key_value:"'".$primary_key_value."'";
        }
        $where = " WHERE `".$primary_key_column."` ".$symbol." ".$value;
    }
    return "UPDATE `".$table."` SET ".implode(',',$data).$where;
}



Angenommen man habe die Tabelle user mit den Spalten id, vorname, nachname, email in der Datenbank, so müsste man für ein insert folgende Arraystruktur aufbauen:
 PHP 
1:
$insert = array('id'=>1, 'vorname'=>'test','nachname'=>null,'email'=>'mail@example.com')

Die Keys bestimmen demnach die Tabellenspalte und der Wert des Arrays den Wert, der in die Datenbank eingetragen werden soll.
Der Parameter $table ist nun mit 'user' zu belegen.
Ein vollständiger Aufruf ginge so:
 PHP 
1:
echo mysql_insert_string('user',array('id'=>1,'vorname'=>'test','nachname'=>null,'email'=>'mail@example.com'));

Die Ausgabe ist:
Zitat:
INSERT INTO `user` (`id`,`vorname`,`nachname`,`email`) VALUES (1,'test',NULL,'mail@example.com')



Bei einem Update verhält sich die Arraystruktur gleich. Lediglich ein Primary Key (wie in den meisten Tabellen die Spalte ID) und der dazugehörige Wert kann noch angegeben werden.
Ein update sähe so aus:
 PHP 
1:
echo mysql_update_string('user',array('vorname'=>'test','nachname'=>null,'email'=>'mail@example.com'),'id',1);

Hier wurde nun also die ID aus dem Array entfernt und hinten als zwei weitere Parameter angegeben.
Ausgabe:
Zitat:
UPDATE `user` SET `vorname`='test',`nachname`=NULL,`email`='mail@example.com' WHERE `id` = 1


Beachte bitte, dass diese Funktionen nur den String zusammenbauen und das mysql(i)_query etc. nicht ausführen.



31.03.2014, 01:43 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2496
      Zitat | Bearbeiten

Allgemein deine Idee hinter diesen Funktionen ist ja nicht schlecht. Ich würde es nur etwas weiter abstrahieren.
Das sollte man früher oder später auf jeden Fall machen. Da gibt es natürlich schon viele fertige Lösungen für, aber manchmal reichen ja auch ganz einfache/schlichte Lösungen, die man selbst implementiert.

Ich hätte es vielleicht "konsequenter" gemacht und so Funktionen geschrieben, die bereits die übergebenen Werte durch Funktionen zum Schutz vor SQL Injection jagt und das ganze dann auch direkt ausführt/an den Server schickt.
Und auch allgemein hätte ich die Funktionen ein wenig anders aufgebaut, damit sie ein wenig flexibler wären. Aber vielleicht reicht ja jemanden das so.

Sonst würde ich noch erwähnen:
Weil du anonyme Funktionen verwendest, kann man diese Funktionen nur mit PHP 5.3 und höher verwenden.
Haben immer mehr Hoster, aber eben noch nicht alle. Deswegen sollte man das vielleicht noch erwähnen, damit sich niemand wundert, wieso es bei ihm vielleicht nicht läuft


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
02.04.2014, 10:00 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Simple MYSQL INSERT und UPDATE   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz