• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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