object-orientied way of using mysqli interface - workshop

36
PHP und MySQL Objektorientierte Nutzung der mysqli - Schnittstelle Waldemar Dell 15.05.2013

Upload: waldemar-dell

Post on 26-Jun-2015

276 views

Category:

Internet


0 download

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

Page 1: Object-orientied way of using mysqli interface - Workshop

PHP und MySQL

Objektorientierte Nutzung der mysqli - Schnittstelle

Waldemar Dell15.05.2013

Page 2: Object-orientied way of using mysqli interface - Workshop

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

Page 3: Object-orientied way of using mysqli interface - Workshop

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

Page 4: Object-orientied way of using mysqli interface - Workshop

4

FUNKTIONSWEISE

Page 5: Object-orientied way of using mysqli interface - Workshop

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 !

Page 6: Object-orientied way of using mysqli interface - Workshop

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.

Page 7: Object-orientied way of using mysqli interface - Workshop

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.

Page 8: Object-orientied way of using mysqli interface - Workshop

8

LAMP – WAMP - WIMP Linux / Windows Apache / IIS MySQL / MariaDB PHP – CGI-Modul oder Modul in Apache XAMPP

Page 9: Object-orientied way of using mysqli interface - Workshop

9

PHP FUNKTIONSTEST

Erstellen Sie eine kleine PHP-Datei im „htdocs-Ordner“ mit Namen phpinfo.php mit folgendem Inhalt:

<?php

phpinfo();

?>

Ausgabe der Konfigurationseinstellungen

Page 10: Object-orientied way of using mysqli interface - Workshop

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>

Page 11: Object-orientied way of using mysqli interface - Workshop

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

Page 12: Object-orientied way of using mysqli interface - Workshop

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

Page 13: Object-orientied way of using mysqli interface - Workshop

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

Page 14: Object-orientied way of using mysqli interface - Workshop

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 !

Page 15: Object-orientied way of using mysqli interface - Workshop

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.

Page 16: Object-orientied way of using mysqli interface - Workshop

16

VORHER: MYSQL PROZEDURAL

mysql_close();

Page 17: Object-orientied way of using mysqli interface - Workshop

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.

Page 18: Object-orientied way of using mysqli interface - Workshop

18

NACHHER: MYSQL OBJEKTORIENTIERT

Page 19: Object-orientied way of using mysqli interface - Workshop

19

VERERBUNG UND KONSTRUKTOR

Im BaseClass Konstruktor

Im BaseClass KonstruktorIm SubClass Konstruktor

Page 20: Object-orientied way of using mysqli interface - Workshop

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.

Page 21: Object-orientied way of using mysqli interface - Workshop

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

Page 22: Object-orientied way of using mysqli interface - Workshop

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

Page 23: Object-orientied way of using mysqli interface - Workshop

23

FRAGEN ?

Was kann PHP nicht? Ist es sicher?

Next: MySQLi…

Page 24: Object-orientied way of using mysqli interface - Workshop

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

Page 25: Object-orientied way of using mysqli interface - Workshop

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

Page 26: Object-orientied way of using mysqli interface - Workshop

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');

Page 27: Object-orientied way of using mysqli interface - Workshop

27

MYSQLI - OBJEKTORIENTIERT

Page 28: Object-orientied way of using mysqli interface - Workshop

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] …

Page 29: Object-orientied way of using mysqli interface - Workshop

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

Page 30: Object-orientied way of using mysqli interface - Workshop

30

SELECT MAL ANDERS (PREPARE METHODE)

Page 31: Object-orientied way of using mysqli interface - Workshop

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' );

Page 32: Object-orientied way of using mysqli interface - Workshop

32

PREPARE MIT PLATZHALTERN

Page 33: Object-orientied way of using mysqli interface - Workshop

33

MEHRFACH-STATEMENTS (MULTI-QUERIES)

Page 34: Object-orientied way of using mysqli interface - Workshop

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, \, ', ",

Page 35: Object-orientied way of using mysqli interface - Workshop

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 ?

Page 36: Object-orientied way of using mysqli interface - Workshop

36 Vielen Dank fürsmitmachen!