You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

xama

User / Kunde

  • "xama" is male
  • "xama" started this thread

Posts: 3,639

Location: Zürich, Schweiz

Occupation: Webdesigner

Thanks: 18

  • Send private message

1

Sunday, June 9th 2013, 5:15pm

[PHP] SimpleMySQL - No more SQL!

SimpleMySQL


Einleitung


Heute stelle ich euch meine Klasse vor, welche ich hauptsächlich in meinen Projekten verwende.
Wie der Titel schon sagt, geht's um eine MySQL Klasse welche ohne SQL auskommt.

Funktionen

Diese Klasse enthält folgende Funktionen:

  • Tabelle erstellen
  • Tabelle löschen
  • Feld erstellen
  • Feld löschen
  • Werte aus der Datenbank auslesen
  • Werte in die Datenbank schreiben
  • Werte in der Datenbank aktualisieren
  • Datensatz löschen
  • Falls meine Klasse nicht die benötigte Funktion enthält, gibt's die Query Funktion

Diese Klasse ist objektorientiert programmiert und setzt vorraus, dass man sich in dem ein wenig eingeübt hat.
Falls gewünscht, fertige ich noch eine prozedurale Klasse an.

Die Klasse benutzen


Da ein Tutorial die beste Möglichkeit ist, euch zu veranschaulichen wie die Klasse funktioniert, habe ich eines verfasst.
Als Beispiel erstellen wir eine Datenbank für ein Loginsystem.

Klasse einbinden


Bevor wir anfangen, müssen wir die Klasse zuerst in unser Projekt einbinden.

PHP Source code

1
2
3
<?php
include('simpleMySQL.class.php');
?>


Ganz Easy. ;)


Objekt erstellen & Verbindung aufbauen


Wir sind aber noch nicht fertig...
Damit wir die Klasse benutzen können, müssen wir ein Objekt erstellen.
Nutzer von Eclipse werden merken, dass neben "new SimpleMySQL" 2 Klammern auftauchen mit 4 Variablen.

PHP Source code

1
2
3
4
5
<?php
include('simpleMySQL.class.php');
$mysql = new SimpleMySQL($host$username$password$dbname);

?>


Da ich euch eine Funktion wie "connect" ersparen wollte, habe ich gleich die Verbindung beim Objektaufruf reingepackt.
Wie man diese Variablen ausfüllt, sollte euch hoffentlich klar sein. :)


Tabelle erstellen


Als nächstes erstellen wir eine Tabelle, wo unsere Werte abgespeichert werden sollen.
Dieser Schritt finde ich als Schwierigsten, da die Funktion ziemlich lang werden kann, wenn ihr viele Felder erstellen wollt.
Die Vorlage ist wie folgt: $mysql->createTable('TABELLE', array('FELDNAME' => 'OPTIONEN', 'FELDNAME2' => 'OPTIONEN);

Um die gewünschte Tabelle grafisch darzustellen, habe ich schnell ne Grafik gebastelt:



Damit MySQL weiss, was die Felder für Typen sind, benötigt er Parameter/Optionen.

Das heisst:

ID : INT NOT NULL AUTO_INCREMENT
username : VARCHAR(50) NOT NULL
password : VARCHAR(50) NOT NULL
email : VARCHAR(50) NOT NULL

So würde das in unserem Code aussehen:

PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->createTable('login', array('id' => 'INT NOT NULL AUTO_INCREMENT''username' => 'VARCHAR(50) NOT NULL''password' => 'VARCHAR(50) NOT NULL''email' => 'VARCHAR(50) NOT NULL'));

?>


Somit hätten wir unsere Tabelle.

Ruft mal euer Script auf und schaut in PMA nach, die Tabelle ist da ;)


Werte in der Datenbank abspeichern


Sooo, als nächstes müssen wir den netten Herrn StClaus in die Datenbank speichern.
Ist verdammt einfach zu machen, seht selbst:

PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->write('login', array('id' => '''username' => 'StClaus''password' => '1234''email' => 'stclaus@northpole.com'));

?>


Zur Erklärung: Das erste Argument ist der Tabellenname und das Zweite ein Array mit den Werten.
Im Array wird jeweils der Feldname gefolgt von einem "=>" und der dazugehörige Wert.
Z.B. array('feldname' => 'wert')


Der User ist nun erfolgreich in der Datenbank abgespeichert worden.


Werte auslesen


Das Auslesen eines Werts ist auch relativ einfach.

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$array $mysql->read('login''*', array('username' => $_POST['username'], 'password' => $_POST['password']));

if(!empty($array['id'])) { 
// Logindaten stimmen
} else {
// Logindaten stimmen nicht
}

?>


Hierbei wird wieder zuerst der Tabellenname definiert und dann den Wert den man auslesen will.
Möchte man gleich die ganze Reihe auslesen, nimmt man * (Abkürzung für Alles)
Der 3. Parameter ist der sogennante "Selector", hier definiert ihr quasi den Filter.
In unserem Beispiel werden in der Tabelle "login" alle Werte ausgelesen, bei denen username und password mit den POST's übereinstimmen.

Wird als Wert den man auslesen will "*" angegeben, werden sämtliche Werte des jeweiligen Datensatzes in ein Array gepackt.
Definiert man stattdessen z.b. "id", wird gleich die ID des Users in die Variable gespeichert.

Bei der Array-Methode muss man nur noch in der IF Abfrage abfragen, ob im Array 'id' leer oder voll ist.


Ich muss zugeben, dass ich hier etwas kompliziert geschrieben hab, aber probierts einfach mal aus...
Ist einfacher als es klingt ^^


Werte in der Datenbank ändern


Angenommen, StClaus möchte seine Email ändern.
Dafür gibt's auch eine Funktion namens "update"

PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->update('login', array('username' => 'StClaus'), array('email' => 'stclaus@nitrado.net'));

?>


Beim 2. Argument wird der Selector definiert.
Quasi damit MySQL weiss, welchen Datensatz er modifizieren muss. Ich habe ihm jetzt den Usernamen mitgegeben und er weiss nun welchen Datensatz er modifizieren muss.
Beim 3. Argument werden die neuen Werte definiert.
In unserem Beispiel wird nur die Email auf "stclaus@nitrado.net" gesetzt.


Datensatz löschen


Um einen User/Datensatz aus der Datenbank zu löschen, genügt folgendes:

PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->remove('login', array('username' => 'StClaus');

?>



Feld erstellen


Möchten wir nachträglich noch ein Feld hinzufügen, wie zum Beispiel "ip", ist so eine Funktion ziemlich nützlich.
Diese heisst "createRow"

PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->createRow('login', array('ip' => 'VARCHAR(20) NOT NULL'));

?>





Feld löschen


Gerade hat mir mein Kumpel erzählt, dass sich die IP ständig ändert und das Feld "ip" unnötig wäre. Damn!
Deshalb lösche ich jetzt wieder das Feld:


PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->removeRow('login''ip');

?>



Tabelle löschen


Ach was, wozu brauche ich einen Login.
Deshalb löschen wir die Tabelle wieder:


PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->removeTable('login');

?>



Funktion die ihr sucht, nicht vorhanden?


Das kann gut sein, deshalb gibt es die "query" Funktion.
Die sollte eig. selbsterklärend sein.

PHP Source code

1
2
3
4
5
6
7
<?php

include('simpleMySQL.class.php');
$mysql = new SimpleMySQL('localhost''ni*****_*sql**, '**********', 'ni*****_*sql**);
$mysql->query($query);

?>




Fragen?


Stellt sie einfach hier im Thread.

Download


Die Klasse findet ihr im Anhang, sowie die Lizenz dazu.
xama has attached the following file:

Franzi564

User / Kunde

Posts: 763

Thanks: 15

  • Send private message

2

Sunday, June 9th 2013, 5:40pm

Geil gemacht.
Wenn ich ein Projekt habe, mache ich mir aber lieber eine eigene :-)

xama

User / Kunde

  • "xama" is male
  • "xama" started this thread

Posts: 3,639

Location: Zürich, Schweiz

Occupation: Webdesigner

Thanks: 18

  • Send private message

3

Tuesday, June 11th 2013, 6:07pm

Danke :)
Du kannst sie ja trotzdem nutzen, so schlimm ist das ja nicht und kannst jederzeit um Lizenzentfernung bitten ^^

United-Blocks

Unregistered

4

Tuesday, June 11th 2013, 9:22pm

Hallo xama!

Erstmal finde ich es wirklich nett von dir, dass Du deine MySQL Class Datei hier im Forum publizierst. Jedoch stellt sich mir die Frage, wo der Vorteil liegt? Warum sollte man mit der von Dir erstellten Class arbeiten, wenn man genau so gut mit MySQL und PHP direkt arbeiten kann?
Ich sehe nicht den Vorteil, ich hoffe Du nimmst Dir die Zeit und erklärst es mir.

Lg

xama

User / Kunde

  • "xama" is male
  • "xama" started this thread

Posts: 3,639

Location: Zürich, Schweiz

Occupation: Webdesigner

Thanks: 18

  • Send private message

5

Tuesday, June 11th 2013, 10:38pm

Hi United-Blocks

Wie du sicher weisst, möchte man jeden Code "sauber" halten und nicht x-mal einen MySQL Connect durchführen sowie SQL Codes ständig vorher testen usw.
Die Klasse soll schlicht und einfach Ordnung bringen und das ist auch optisch schöner.
Zudem spart das auch Zeit & Nerven, sofern man sich mit der Klasse auskennt.

Ausserdem finde ich es einfacher, wenn man eine einzige Funktion aufrufen muss, das Datenbankarray in einer Variable ist und nurnoch die Ergebnise mit einer foreach Schleife ausgeben muss.

Hoffe, ich konnte dir einen näheren Einblick geben :)

This post has been edited 1 times, last edit by "xama" (Jun 11th 2013, 10:44pm)


xama

User / Kunde

  • "xama" is male
  • "xama" started this thread

Posts: 3,639

Location: Zürich, Schweiz

Occupation: Webdesigner

Thanks: 18

  • Send private message

6

Wednesday, June 12th 2013, 10:18pm

20 Minuten zu früh.
Naja, was soll's:
#Push

BananaCrafting

User / Kunde

Posts: 836

Thanks: 51

  • Send private message

7

Wednesday, June 12th 2013, 10:58pm

An sich eine gute Idee, aber:
- Welcher PHP'ler hat sich noch keine eigene Klasse geschrieben? :D
- Ich werde die Klasse nicht nutzen (können), da ich erstens eine eigene habe und zweitens nur PDO verwende :D

Trotzdem danke!

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net