• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Prepared Statement, kleines HowTo

__struct

Jonagold
Registriert
11.04.13
Beiträge
20
Hi,

gerade Neulinge im Bereich sql & php scheitern häufig an prepared Statements. Vermutlich da mit Klassen gearbeitet wird. ObjektOrientiert.

Im Grunde ist es recht simple und bringt verschiedene Vorteile.

1. Prepared Statements macht den Einsatz von Input Sanitation Verfahren {"unter vorbehalten"} in erster Instanz unnötig.
- klassische Methoden zum Vorbereiten von Queries wären z.B. MySqlRealEscapestrings | Addslashes | StripTags und vergleichbares
- im Paradigma der Prepared Statements wird das automatisiert und man kann seine Daten ungefiltert abschicken.

2. Prepared Statements sind ideal um viele Queries hintereinander abzuschicken bei denen sich lediglich die Werte ändern.


Um es kurz zu machen:

Man erstellt eine openDB.php.inc Datei. Wie gewohnt deren Inhalt wie folgt aussieht:

Code:
<?php
$datenbanknutzer = 'dbnutzer'; 
$nutzerpasswd    = 'passwd';

// Objekt erzeugen 
$dbh    = new PDO("mysql:host=127.0.0.1;dbname=dbname", $user, $passwd);

?>


Bei Bedarf wird die Datei eingebunden:

Code:
require_once '/inc/openDB.php.inc';


Weitere Vorbereitungen sind nicht nötig und man kann direkt loslegen.


Code:
$id = '10';
$parent = '2';

$sth = $dbh->prepare('SELECT * FROM XY WHERE id = ? and parent = ?'); 
$sth->execute(array($id,$parent));

/*
*
* das Beispiel wäre eindeutig (id) und gibt nur eine Zeile zurück
*
*/ 

$result = $sth->fetch();
$id = $result['0'];
$xy = $result['1'];

/* etc. */


Werden mehrere Zeilen angesprochen lassen sich die Ergebnisse in einem foreachloop auslesen:

Code:
$sth = $dbh->prepare('SELECT * FROM xy WHERE x LIKE ? AND y = ?'); 
$sth->execute(array('%'.$xsearch.'%',$Ykriterium)); 
foreach($sth as $result){    
   $id = $result['0'];
   $columnB = $result['1'];
 }

/* etc. */



Feuert man eine query mit unterschiedlichen Werten mehrfach hintereinander sähe das z.B. so aus:

Code:
$sth = $dbh->prepare('SELECT * FROM xy WHERE id = ?');

for($i = 0;$i <= 100;++$i){
$sth->execute(array($i));
$result = $sth->fetch();
var_dump($result);
}


Zum schließen der Verbindung:

Code:
$dbh = NULL;
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Bierhefe