Object-orientied way of using mysqli interface - Workshop

Preview:

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.

Citation preview

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!

Recommended