Hallo DevNL,
Introductie
Aangezien iemand de eerste tutorial moet maken, wil ik jullie vandaag uitleggen hoe je met de MyON-library makkelijk met MySQL kunt werken in PHP.
Een deel van de code uit deze tutorial zal niet kant-en-klaar zijn. Als je die code wilt gebruiken, zul je het zo aan moeten passen dat het in jouw situatie werkt. Een goede basiskennis #PHP is hiervoor dus vereist.
Wat is MyON?
MyON staat voor MySQL Object Notation. D.m.v. objecten en klassen en enkele functies kun je hiermee SELECT
, INSERT
, UPDATE
en DELETE
-queries van MySQL uitvoeren zonder dat je een woord SQL hoeft te schrijven. De library is er vooral op gebouwd om makkelijk te kunnen worden geleerd, terwijl het wel flexibel blijft.
Vereiste voorkennis
- Libraries laden met een autoloader
- Bekendheid met namespaces
- PHP-klassen en -objecten
- MySQL-databases maken
- PDO-verbdining maken
- Algemene basiskennis van PHP
Tutorial
Stap 1: MyON downloaden en installeren
Je kunt de library downloaden via deze link:
https://github.com/Xesau/MyON/archive/master.zip
In de ZIP zit een map, MyON-master, waarin een map vendor zit. Sleep de map Xesau die daarin zit naar de map waar je autoloader hem kan laden.
Stap 2: PDO-verbinding opzetten en MyON::init
Om verbinding te maken met de database, gebruikt de library PDO
. Om MyON te gebruiken zul je dus eerst een PDO-object moeten maken. Dit PDO-object geef je vervolgens door aan de functie ::init
in Xesau\MyON\MyON
. Omdat we anders Xesau\
voor alle klassenamen moeten zetten, gebruiken we een use-statement aan het begin van het bestand.
<?php
// Gebruik de Xesau\MyON-namespace als MyON in dit bestand
use Xesau\MyON;
// Verbind met PDO
$pdo = new PDO('mysql:127.0.0.1;dbname=test_myon', 'root', 'passw');
// Geef de PDO aan MyON
MyON\MyON::init($pdo);
Als je deze code uitvoert, gebeurt er nog niet zoveel. Althans, als het goed is zie je niets. Als je wel iets ziet, is er een fout opgetreden.
Stap 3: Een objectklasse maken
Integraal aan MyON zijn de klassen die je voor tabellen maakt: elke tabel die je in MyON wilt gebruiken, krijgt een eigen klasse.
Die klasse heeft een aantal kenmerken:
De klasse gebruikt een speciale trait, namelijk Xesau\MyON\DbObject
De DbObject
-trait geeft aan dat we bij de klasse de MyON-functies willen gebruiken, zoals ::select
en ::insert
.
De klasse heeft een public static function objectInfo()
die een object Xesau\MyON\ObjectInfo
geeft.
De ObjectInfo
-klasse wordt door MyON gebruikt om informatie te verkrijgen over je databasetabel. Het wil sowieso de naam van de tabel weten, en het wil ook weten welke velden er een PRIMARY
-key hebben, zodat het verschillende objecten uit elkaar kan houden. (De PRIMARY-key kan meerdere velden bevatten).
Ook kun je relaties aangeven tussen verschillende tabellen met de ref(field, class)
-functie, maar daar komen we in een andere tutorial op terug.
<?php
use Xesau\MyON;
$pdo = new PDO('mysql:127.0.0.1;dbname=test_myon', 'root','passw');
MyON\MyON::init($pdo);
class User {
// Deze klasse is voor MyON
use MyON\DbObject;
public function objectInfo() {
// De naam van deze tabel is users en het primaire veld is id
return new MyON\ObjectInfo('users', 'id');
}
}
Als je deze code uitvoert, zie je ook nog niets. In de code zie je echter wel duidelijk hoe je voor MyON aangeeft dat je een tabel wil gebruiken.
De constructor voor ObjectInfo
heeft twee parameters. De eerste parameter is de naam van de tabel. De tweede parameter is de PRIMARY-sleutel. Als je meerdere velden in je PRIMARY-sleutel hebt, kun je deze in een array aangeven (['primary_field_1', 'primary_field_2']
).
Stap 4: Testgegevens invoeren
Deze stap heeft niet heel veel met MyON te maken. Maak in de database wat gebruikers aan zodat je bij de volgende stap kunt testen of het werkt.
Stap 5: Gegevens opvragen
MyON heeft een aantal manieren waarop je gegevens uit de database kunt opvragen.
::byPrim
Met de ::byPrim-functie kun je een rij opvragen met een specifiek primaire veldwaarde (bijvoorbeeld het ID-nummer).
$user = User::byPrim(1);
if ($user == null) {
echo 'Gebruiker niet gevonden.';
} else {
// Doe iets met de gebruiker [stap 6]
}
kun selecteer je de gebruiker met ID 1. Als er geen rij kan worden gevonden, geeft deze functie een null
-waarde terug.
::select
Met de ::select-functie kun je heel specifiek resultaten selecteren. Met de ->where(field, operator, value)
-functie kun je de resultaten verder vernauwen.
$users = User::select()
->where('rank', '>', 3)
->desc('time_registered');
foreach($users as $user) {
// Doe iets met de gebruiker [stap 6]
}
De code hierboven selecteert de gebruikers waar de waarde van het veld rank
hoger is dan 3. Vervolgens sorteert hij de gebruikers ook nog op aflopende volgorde van het time_registered
-veld.
::select & ->first
Als je met ::select gegevens hebt opgevraagd, kun je met ->first()
het eerste resultaat opvragen, en net zoals bij ::byPrim geeft hij een null
-waarde als er geen resultaat gevonden is.
$users = User::select()
->where('username', '=', 'Xesau');
$user = $users->first();
if ($user == null) {
echo 'Gebruiker met naam Xesau niet gevonden.';
} else {
// Doe iets met de gebruiker [stap 6]
}
::select & ->count
Als je alleen maar wilt weten hoeveel rijen er in de tabel staan, kun je de ->count()
-functie gebruiken.
echo 'Er zijn ' . User::select()->where('rank', '>', 3)->count() . ' gebruikers met een rang hoger dan 3.';
::select & ->where & ->delete
Je kunt ook resultaten verwijderen. Wees wel voorzichtig dat je alleen de dingen verwijderd die ook echt weg moeten.
User::select()->where('activated', '=', 'no')->delete();
De code hierboven verwijdert alle gebruikers waar het veld activated
de waarde no
heeft.
Stap 6: De gegevens gebruiken
Je hebt in stap 5 kunnen lezen hoe je gegevens uit de database opvraagt. Je zag dat je objecten kreeg, die daar $user
heten. Deze objecten kun je gebruiken om de rijen uit te lezen en aan te passen. Alle velden die de rij in de database heeft, heeft het object ook.
// Laat het veld username van de gebruiker op het scherm zien.
echo $user->username;
In de code hierboven zie je dat de waarde van het veld username
van de gebruiker wordt geecho
'd. De syntax voor het lezen van velden is dus $object->veldnaam
.
Je kunt ook gegevens aan de rij veranderen. Dit wordt dan meteen doorgevoerd in de database.
// Verander het e-mailadres van de gebruiker naar de waarde van $nieuwEmailAdres
$user->email_address = $nieuwEmailAdres;
// Geef de gebruiker 10 punten door zijn puntenaantal += 10 te doen
$user->points += 10;
In de code hierboven zie je hoe je de =
-operator kunt gebruiken om een veld een andere waarde te geven. Andere operatoren, zoals +=
, -=
en *=
werken ook, op dezelfde manier zoals je ze bij andere PHP-variabelen zou gebruiken.
Nawoord
Ik hoop dat jullie wat hebben geleerd van deze tutorial, en dat jullie MyON zullen gebruiken in de toekomst.
~ @Xesau