Crmgo Blog

PHP PDO

PHP PDO

Beispiele für die Verwendung von PDO Einrichtung der MySQL-Verbindung: Verbindung unter Berücksichtigung der Codierung: PDO bietet zwei Möglichkeiten zur Ausführung von Abfragen: Vorbereitung von Variablen – empfohlen für Geschwindigkeit und Sicherheit direkte Ausführung Abfragen, die Informationen ändern, werden über die exec()-Methode ausgeführt: Die exec()-Methode gibt einen Wert zurück –…

PHP PDO

Beispiele für die Verwendung von PDO

Einrichten der Verbindung zu MySQL:

try {
$db = new PDO('mysql:host=localhost;dbname=testdb', $login, $passwd);
} catch (PDOException $e) {
echo $e->getMessage();
}

// закрытия соединения и освобождение ресурсов
$db = NULL;

Verbindung unter Berücksichtigung der Codierung:

$db = new PDO('mysql:host=xxxx.ua;dbname=xxxx', $this->login, $this->passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

PDO bietet zwei Möglichkeiten, eine Abfrage auszuführen:

  • Vorbereitung von Variablen – empfohlen für Geschwindigkeit && Sicherheit
  • direkte Ausführung

Abfragen, die Informationen ändern, werden über die Methode exec() ausgeführt:

$db->exec(“INSERT INTO users (login) VALUES(‘john’)”);
$id = $db->lastInsertId();
$db->exec(“UPDATE user SET login=‘alex’”)

Die Methode exec gibt einen Wert zurück – die Anzahl der betroffenen Zeilen, oder FALSE im Fehlerfall.

Abfragen, die Informationen abrufen, werden über die Methode query() ausgeführt:

$res = $db->query(“SELECT * FROM users”);

Der Rückgabewert ist FALSE im Fehlerfall.

Escaping von Sonderzeichen (Escaping von Werten): $db->quote($_POST[‘login’])

Mögliche Arten der Datenabfrage:

  • Array (numerischer oder assoziativer Index)
  • Zeichenkette (für eine Spalte)
  • Objekte
  • Callback-Funktion
  • Lazy Loading (faule Abfrage)
  • Lazy Loading (faule Abfrage)
  • Iteratoren

Abfrage als Array:

$res = $db->query(“SELECT * FROM users”);
while ($row = $res->fetch(PDO::FETCH_NUM)){
// $row - массив с числовыми ключами
}

$res = $db->query(“SELECT * FROM users”);
while ($row = $res->fetch(PDO::FETCH_ASSOC)){
// $row - ассоциативный массив значений, ключи - названия столбцов
}

$res = $db->query(“SELECT * FROM users”);
while ($row = $res->fetch(PDO::FETCH_BOTH)){
// $row - числовой и ассоиативный массив
}

Abfrage einer einzelnen Spalte:

$column = $db->query(“SELECT id FROM users WHERE login=‘login’ AND password=‘password’”);
$user = $column->fetchColumn())

Abfrage als Objekt:

$res = $db->query(“SELECT * FROM users”);
while ($obj = $res->fetch(PDO::FETCH_OBJ)) {
// $obj - экземпляр объекта stdClass, имена столбцов - свойства объекта
}

Abfrage als Iterator (Iterator-Schnittstelle)

$res = $db->query(“SELECT * FROM users”, PDO::FETCH_ASSOC);
foreach ($res as $row) {
// $row - ассоциативный массив значений
}

Lazy Loading – gibt das Ergebnis als Objekt zurück, aber die tatsächliche Befüllung des Objekts mit Werten erfolgt erst bei der ersten Zugriffsoperation auf dieses Feld:

$res = $db->query(“SELECT * FROM users”, PDO::FETCH_LAZY);
foreach ($res as $row) {
echo $row[‘name’]; // получение значения
}

Abrufen aller Abfrageergebnisse auf einmal:

$qry = “SELECT * FROM users”;
$res = $db->query($qry)->fetchAll(PDO::FETCH_ASSOC);
// $res - массив всей выборки, каждая строка представлена ассоциативным массивом

Verarbeitung des Abfrageergebnisses mit einer Callback-Funktion:

function add_salt($login,$passw) { … }
$res = $db->query(“SELECT * FROM users”);
$res->fetchAll(PDO::FETCH_FUNC, “add_salt”);

Möglichkeiten von Abfragen mit vorbereiteter Ausführung:

  • wird einmal kompiliert, wird die erforderliche Anzahl von Malen ausgeführt
  • klare Trennung zwischen Struktur und Eingabedaten (Verhinderung von SQL-Injection)
  • schnellere Ausführung im Vergleich zu query()/exec(), sogar bei einmaliger Ausführung

Beispiel einer Abfrage:

$stmt = $db->prepare(“SELECT * FROM users WHERE id=?”);
$stmt->execute(array($_GET[‘id’]));
$stmt->fetch(PDO::FETCH_ASSOC);

Parameter für die Abfrage können als Namen angegeben und an Variablen gebunden werden:

$db->prepare('SELECT * FROM users WHERE name=:name AND email=:email');
$db->execute(array(':name'=>john,':email'=>'john@domain.com'));
$result = $db->fetchAll();
print_r($result);

$dbh->execute(array(':name'=>'alex',':email'=>'alex@domain.com'));
print_r($result);

// пример использования метода bindParam()
try{
$sql = $db->prepare("INSERT INTO USERS(name,email) VALUES (:name,:email)");
$sql->bindParam(':name',$name);
$sql->bindParam(':email',$email);

// назначение значений и вставка новой строки

$name='Joy';
$email='joy@domain.com';
$dbh->exec();

$name='debian';
$email='debian@domain.com';
$dbh->exec();
}
catch(PDOException $e) {
$dbh->rollBack();
echo 'Error : '.$e->getMessage();
}

Transaktionen. Fast alle PDO-Treiber können mit Transaktionen arbeiten:

$db->beginTransaction();
if ($db->exec($qry) === FALSE) {
$db->rollback();
}
$db->commit();

Abrufen von Metainformationen über die Abfrage – Anzahl der Spalten und Informationen zu allen Spalten:

$res = $db->query($qry);
$ncols = $res->columnCount();
for ($i=0; $i < $ncols; $i++) {
$meta_data = $res->getColumnMeta($i);
}

Erweiterung der PDO-Funktionalität:

class DB extends PDO
{
function query($qry, $mode=NULL)
{
$res = parent::query($qry, $mode);
if (!$res) {
var_dump($qry, $this->errorInfo());
return null;
} else {
return $res;
}
}
}

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.

Kategorien: PHP