object-orientied way of using mysqli interface - workshop
DESCRIPTION
In this workshop I make a little introduction for php and also I explained the mysqi interface and the object-oriented style of using it.TRANSCRIPT
PHP und MySQL
Objektorientierte Nutzung der mysqli - Schnittstelle
Waldemar Dell15.05.2013
2
WER ICH BIN ?
Insformatikstudent (WI) an der FH Kölnin Gummersbach
Programmiert seit 8. Lebensjahr Beherrscht über 10
Programmiersprachen Seit 2001 in php-entwicklung involviert Autor eines Blogs für
Androidprogrammierung
3
AM ANFANG WAR DAS PROBLEM
Die erste Version entwickelte 1994 Rasmus Lerdorf, der eigentlich nur eine Möglichkeit zur Programmierung seines eigenen Webservers suchte - Dynamische Seiten
Hieß zu Beginn "Personal Home Page“ danach"PHP HyperText Preprocessor“
Sein Problem: Besucherzähler zu implementieren
4
FUNKTIONSWEISE
5
VERSION NACH VERSION 1995 PHP / FI (Form Interface/Interpreter) quasi PHP 2 1999 PHP 3:
Andi Gutmans und Zeev Suraski machten ein Remake
mit Lerdorf 2000 PHP 4:
Zend Engine 1 – Ausführungsgeschwindigkeit erhöht
Sicherheit verbessert, Sessions eingeführt, neue Sprachkonstrukte
2004 PHP 5:Zend Engine 2 – OOP, XML, DOM, Exceptions-
Unterstützung, uvam. 2012 PHP 6: Nein PHP 5.4 !
6
VERBREITUNG PHP wird auf etwa 244 Millionen Webseiten eingesetzt (Stand:
Januar 2013) und wird auf ca. 78,8 % aller Websites als serverseitige Programmiersprache verwendet (Stand: März 2013) Die am häufigsten verwendete PHP-Version ist 5.3 (Stand: März 2013).
MySQL: Forrester berichtete, dass MySQL die höchste Akzeptanrate und das höchste Wachstum verzeichnet. MySQL hat gemäß Forrester weiterhin die größte Marktbedeutung im Open-Source-Datenbankmarkt und hat mit geschätzten 16.000 die höchste Anzahl zahlender Kunden für Produktsupport.
7
SPRACHMERKMALE VON PHP
Dynamische Typisierung Erlaubt prozedurale, aber auch klassenbasierte, objektorientierte
Programmierung. Eine objektorientiertes PHP Anwendung besteht aus einer
Menge von PHP-Klassen, die in Quelltextdateien, die den Regeln der PHP Programmiersprache genügen, deklariert werden.
Diese Quelltextdateien werden vom PHP-Interpeter übersetzt und ausgeführt.
8
LAMP – WAMP - WIMP Linux / Windows Apache / IIS MySQL / MariaDB PHP – CGI-Modul oder Modul in Apache XAMPP
9
PHP FUNKTIONSTEST
Erstellen Sie eine kleine PHP-Datei im „htdocs-Ordner“ mit Namen phpinfo.php mit folgendem Inhalt:
<?php
phpinfo();
?>
Ausgabe der Konfigurationseinstellungen
10
WER C++/JAVA KANN, DER KANN AUCH PHPHallo Welt-Beispiel
1: <!DOCTYPE html> <html>
2: <head> <meta charset=“utf-8“ />
3: <title>PHP Test</title>
4: </head>
5: <body>
6: <?php echo 'Hello World'; ?>
7: </body>
8: </html>
11
VARIABLEN<?php
$text = "Ich bin ein String !";
echo $text;
Ich bin ein String !
echo "<br>";
echo $text,$text,$text;
echo "<br>";
Ich bin ein String !Ich bin ein String !Ich bin ein String !
$L = "langer"; $K = "kurzer";echo "Ich bin ein $L$L$L$L$L Text !";Ich bin ein langerlangerlangerlangerlanger Text !echo "<br>";echo "Ich bin ein $K Text !";Ich bin ein kurzer Text !echo "<br>";$I = 10;$J = 5;echo $I,"+",$J,"=",$I+$J; ?>10+5=15
12
SCHLEIFEN AS USUALDO-WHILE
FOR
Aktueller Zähler: 0Aktueller Zähler: 1Aktueller Zähler: 2Aktueller Zähler: 3Aktueller Zähler: 4Aktueller Zähler: 5Aktueller Zähler: 6
i ist jetzt: 0i ist jetzt: 1i ist jetzt: 2…i ist jetzt: 9i ist jetzt: 10
13
WENN… BEDINGUNGEN<?php
$tag = date("l");
if ($tag =="Monday") echo "Heute ist Montag";
if ($tag =="Tuesday") echo "Heute ist Dienstag";
if ($tag =="Wednesday") echo "Heute ist Mittwoch";
if ($tag =="Thursday") echo "Heute ist Donnerstag";
if ($tag =="Friday") echo "Heute ist Freitag";
if ($tag =="Saturday") echo "Heute ist Samstag";
if ($tag =="Sunday") echo "Heute ist Sonntag";
?>
Heute ist Mittwoch
14
FUNKTIONEN<?php
function tag ($anzahl)
{
$sekunden = 3600 * 24 * $anzahl;
return $sekunden;
}
$tag = 7;
$x = tag($tag);
echo "$tag Tage bestehen aus $x Sekunden !";
?>
7 Tage bestehen aus 604800 Sekunden !
15
PHP GOES OOP – WARUM ?
Modularisierung: Zerlegung des Software-
Systems in autonome Einheiten. Wiederverwendung: Bereits implementierte
Einheiten sollen zu einem neuen Ganzen zusammengesetzt werden können. Erweiterbarkeit: Bestehende Einheiten sollen um
neue Funktionalität erweitert werden können.
Abstraktion und Kapselung: Der Verwender einer solchen Einheit nutzt
deren öffentliche Schnittstelle, Implementierungsdetails werden
versteckt.
16
VORHER: MYSQL PROZEDURAL
mysql_close();
17
KLASSEN UND OBJEKTE Klasse: Bauplan für die Erzeugung von Objekten Klasse kapselt Daten (Attribute) und Operationen (Methoden) in
einer Einheit. Jedem Objekt lässt sich eine Klasse zuordnen. Den Objekten einer Klasse ist ihre Funktion gemeinsam, da sie
über die selben Methoden verfügen. Die Objekte einer Klasse unterscheiden sich nur in ihrem Zustand
von einander.
18
NACHHER: MYSQL OBJEKTORIENTIERT
19
VERERBUNG UND KONSTRUKTOR
Im BaseClass Konstruktor
Im BaseClass KonstruktorIm SubClass Konstruktor
20
MAGISCHE METHODEN
PHP reserviert alle Funktionsnamen, die mit __ beginnen, als magisch.
Die Funktionen __construct(), __destruct(), __call(), __callStatic(),
__get(), __set(),__isset(), __unset(), __sleep(), __wakeup(),
__toString(), __invoke(), __set_state(), and__clone() , __autoload()
sind in PHP-Klassen magisch.
21
HTML PHP
….
<form method="get" action="tuwas.php">
<input type="text" size="4" name="werta“ />
<input type="text" size="4" name="wertb“ />
</form>
In PHP:
$_GET[‘werta‘]; Eingegebener Wert von Textfeld wert A
$_GET[‘wertb‘]; Eingegebener Wert von Textfeld wert B
22
ÜBUNG: TASCHENRECHNER
Erstellen Sie ein Taschenrechnerprogramm, welches zwei Textfelder verarbeitet und mittels Operationen, das richtige Ergebnis liefert
Tipp: php.net/manual/de (Stand: 2013-05-03) Vorlage: rechner.zip
23
FRAGEN ?
Was kann PHP nicht? Ist es sicher?
Next: MySQLi…
24
MYSQLI - IMPROVED
Seit PHP 5.2.5 Der OOP Zugriff ist einheitlich, wodurch arbeiten im Team oder
an Fremdprojekten vereinfacht wird Größere Geschwindigkeit - Laut Hersteller kann ein vielfaches an
Geschwindigkeit erreicht werden. Verbesserte Sicherheit - Für die PHP-MySQL Verbindung wird
eine SSH-ähnliche Authentifizierung benutzt
25
MYSQLI - IMPROVED (2)
Das neue Binärprotokoll von MySQL wird verwendet. Dadurch stehen mehr Funktionen zur Verfügung und die Verarbeitung ist schneller und effizienter
Keine Standardverbindung und Prepared Statements erzwingen eine saubere und somit sicherere Programmierung
Verbesserte Trace- und Debug-Funktionen Multi-Queries werden unterstützt
26
PROZ./OOP MYSQL -> MYSQLI mysql_connect() -> mysqli_connect() mysql_query() -> mysqli_query() mysql_fetch_array() -> mysqli_fetch_array()
mysqli_query() -> $objekt->query() mysqli_fetch_array() -> $objekt->fetch_array() mysqli_num_rows() -> $objekt->num_rows mysqli_affected_rows() -> $objekt->affected_rows
$objekt = new mysqli('localhost', 'root', '', 'address');
27
MYSQLI - OBJEKTORIENTIERT
28
MYSQLI – FETCH METHODEN mysqli_result::fetch_array — Fetch a result row as an associative, a
numeric array, or both$zeile['name']
mysqli_result::fetch_assoc — Fetch a result row as an associative array mysqli_result::fetch_field — Returns the next field in the result set mysqli_result::fetch_object — Returns the current row of a result set as an
object$zeile->name
mysqli_result::fetch_row — Get a result row as an enumerated array$zeile[0] , $zeile[1] …
29
ÜBUNG: ADRESSBUCH
Erstellen Sie ein Adressbuch, indem man Einträge machen kann und anzeigen lassen kann.
Tipp: php.net/manual/de (Stand: 2013-05-03) Vorlage: adress.zip
30
SELECT MAL ANDERS (PREPARE METHODE)
31
INSERT ÜBER PREPARE
s = Stringi = Integer (Ganzzahl)d = Double (Gleitkommazahl)b = BLOB (Binary Large Object - also eine binäre Datei)
$eintrag->bind_param( 'issd', 27, 'Werkzeug', 'Schraubenzieher', '39.99' );
32
PREPARE MIT PLATZHALTERN
33
MEHRFACH-STATEMENTS (MULTI-QUERIES)
34
MULTIQUERY & SQL-INJECTION
Dem Multi Query kann man quasi unbegrenzt Anweisungen mitgeben, die mit einer einzigen Anfrage abgearbeitet werden. Das ist wesentlich performanter als mehrere kleine Anweisungen an die DB zu schicken.mysqli_multi_query
$modbereich = $db->real_escape_string( 'Webdesign & Co.' );mysqli_real_escape_string
Characters encoded are NUL (ASCII 0), \n, \r, \, ', ",
35
VORTEILE Die Geschwindigkeit ist wesentlich höher, vor allem bei
Massenabfragen Multi-Queries Prepared Statements Unterstützung von Transaktionen (InnoDB) SQL-Injections sind nahezu unmöglich Der Quellcode ist besser strukturiert und die Abfragen sind
besser lesbar
PDO ?
36 Vielen Dank fürsmitmachen!