Link zum Thema: http://www.php.net/manual/de/pdo.prepared-statements.php
Hier gibts nix weiter zu sagen, außer dass der code denke ich gut zu verstehen ist und
wer PDO immer noch nicht nutzt, ist selbst schuld :p
Die Klasse:
PHP
// Sql.php
<?php
class Sql
{
private static $dbh;
final public static function connect($host=false,$username=false,$password=false,$pers_con=false)
{
// $host = host [string] ...
// $username = [string] ...
// $password = [string] ...
// $pers_con = [bool] siehe http://www.php.net/manual/de/pdo.connections.php "Beispiel #4 Persistente Verbindungen"
// verbindung herstellen:
try{
self::$dbh = new PDO(
'mysql:host='.$host,
$username,
$password,
array(PDO::ATTR_PERSISTENT => $pers_con)
);
return true;
}catch(PDOException $e){
throw new Exception($e->getMessage());
}
}
final public static function exe($sql=null,$para=null,$bind_para=false)
{
// $sql = [string] die query. zb "SELECT * FROM `tabelle` WHERE `name` = :name;"
// $para = [array] parameter wie zb array( ':name' => 'Hans' )
// $bind_para = [bool] siehe http://de3.php.net/manual/de/pdostatement.bindparam.php
$stmt = self::$dbh->prepare($sql);
if($bind_para and is_array($para)){
foreach($para as $key => &$val){
if(is_string($val)){
$stmt->bindParam($key,$val,PDO::PARAM_STR);
}elseif(is_bool($val)){
$stmt->bindParam($key,$val,PDO::PARAM_BOOL);
}elseif(is_null($val)){
$stmt->bindParam($key,$val,PDO::PARAM_NULL);
}elseif(is_numeric($val)){
$stmt->bindParam($key,$val,PDO::PARAM_INT);
}
}
$para=null;
}
$result = null;
if(!$stmt->execute(($para)?$para:null)){
$err_info = $stmt->errorInfo();
throw new Exception(
'(SQLSTATE: '.$err_info[0].') '.$err_info[2].' -- Query: '.$sql
);
}else{
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$result[] = $row;
}
}
$stmt = null;
return $result;
}
final public static function PDObeginTransaction()
{
return self::$dbh->beginTransaction();
}
final public static function PDOcommit()
{
return self::$dbh->commit();
}
public static function PDOrollBack()
{
return self::$dbh->rollBack();
}
final public static function PDOlastInsertId()
{
return self::$dbh->lastInsertId();
}
}
?>
Alles anzeigen
Bsp zur Nutzung:
PHP
<?php
require_once 'Sql.php';
try{
// verbindung aufbauen:
Sql::connect('localhost','myusername','mypassword',true);
// optional aber ich empfehle es:
Sql::exe("SET sql_mode = 'STRICT_ALL_TABLES';"); // http://dev.mysql.com/doc/refman/5.1/de/constraint-invalid-data.html
Sql::exe("USE `mydb`;");
}catch(Exception $e){
// error handling
die($e->getMessage());
}
// query:
$sql = "SELECT `id`,`name` FROM `mydb`.`mytable` WHERE `name` = :name ORDER BY `id` DESC LIMIT :start,:max";
// parameter:
$para = array(
':name' => 'hans'
':start' => 0
':max' => 100
);
/*info:
bei nutzung von "LIMIT :start,:max" wird ->bindParam() benötigt
daher beim abfeuern Sql::exe($sql,$para,true) -- also TRUE als 3ten parameter mitgeben
*/
// "einfach ausführen" =)
$daten = Sql::exe($sql,$para,true);
var_dump($daten);
/* wichtig:
PDO unterstützt keine "multi-queries"!
heißt - das hier ist falsch:
$sql = "
SELECT * FROM `tblansprechpartner` WHERE `Vorname` = :vorname;
SELECT * FROM `tblansprechpartner` WHERE `Vorname` = :vorname;
SELECT * FROM `tblansprechpartner` WHERE `Vorname` = :vorname;
";
richtig wäre zb ->beginTransaction, ->commit und ->rollBack zu nutzen und jede query einzelln abzufeuern
*/
?>
Alles anzeigen