pdoAan de slag met pdo


Opmerkingen

Deze sectie geeft een overzicht van wat pdo is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen pdo vermelden en een link naar de gerelateerde onderwerpen bevatten. Omdat de documentatie voor pdo nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Installatie of instellingen

PDO is een universele opdracht voor databaseverbinding in PHP, het ondersteunt 12 verschillende databasetypes, bijvoorbeeld MySQL, MongoDB, NoSQL . Een grote bonus van PDO is dat het uw code berekent om het database-type te ondersteunen, zodat u geen enkele kans hoeft te maken om over te stappen naar een ander database-systeem.


Samenvatting

BOB MySQLi
Database ondersteuning 12 verschillende stuurprogramma's MySQLi
API OOP OOP + procedureel
Verbinding Gemakkelijk Gemakkelijk
Benoemde parameters Ja Nee
Object mapping Ja Ja
Opgestelde verklaringen (klantzijde) Ja Nee
Prestatie Snel Snel
Opgeslagen procedures Ja Ja

Verbinding met de database met BOB:

Het verbindingsgedeelte ziet er ongemakkelijk uit, maar dat moeten we oplossen. De rest van de BOB is eenvoudig en nuttig, het helpt ook om het beveiligde gedeelte nog eenvoudiger te maken.

$connection = new PDO("mysql:host=localhost;dbname=myDatabase, username, password);
 

De BOB-verbinding is als volgt te bestellen:

BOB ( database type : host = host ; dbname = database name , root , password );


Veilige selectie uit de database met behulp van BOB:

// We use a array to hold the data about whats the :var is in normal $var
$params = array(
    ':username' => '$username', 
    ':email' => $mail, 
);

// Prepare the SQL and using named secure parameters ":username"
$pdo->prepare('SELECT * FROM users WHERE username = :username AND email = :email');

// Execute the $params and send them to the $pdo->prepare 
$pdo->execute($params);
 

De code die u zojuist hebt gelezen, is SQL-injectie met beveiligde agents


tutorials:

Installeren:

Hoe PDO te installeren als je het niet hebt

Gidsen:

W3Schools tutorial
Tuts + Tutorial (aanbevolen)

BOB Instelling Attribuut Errormode

PDO :: setAttribute stelt een kenmerk in op de database-handle. Beschrijving van setAttribute is:

public bool PDO::setAttribute ( int $attribute , mixed $value )
 

BOB :: ATTR_ERRMODE: dit kenmerk wordt gebruikt voor foutrapportage. Het kan een van de volgende waarden hebben.

  • PDO::ERRMODE_SILENT : Als de ATTR_ERRMODE niet is ingesteld in de code, is ERRMODE_SILENT de standaardwaarde van het kenmerk ATTR_ERRMODE. Het stelt foutcodes in. In de stille modus, als er een fout is in SQL, genereert PDO geen uitzonderingen; BOB geeft geen waarschuwingen; het zal gewoon onwaar terugkeren. De waarde van PDO :: ERRMODE_SILENT is 0. Het script wordt uitgevoerd zonder enige fout of waarschuwing te genereren.
  • PDO::ERRMODE_WARNING : deze waarde verhoogt E_WARNING. Als er in de waarschuwingsmodus een fout optreedt in SQL, geeft PDO waarschuwingen af, maar blijft het script actief. Waarde van PDO :: ERRMODE_WARNING is 1. Het script wordt uitgevoerd met een waarschuwing over de fout.
  • PDO::ERRMODE_EXCEPTION : deze waarde PDO::ERRMODE_EXCEPTION uitzonderingen. Als er in de uitzonderingsmodus een fout is opgetreden in SQL, genereert PDO uitzonderingen en wordt het script gestopt. De waarde van PDO :: ERRMODE_EXCEPTION is 2. Het script wordt gestopt met het genereren van de fout die de uitzondering veroorzaakt.

Voorbeeld: Nu gaan we de verschillende waarden van het attribuut ATTR_ERRMODE zien met enkele voorbeelden. Maak hiervoor een database met de naam learn_project_db en plaats er een tabel met de naam user_table in. Het volgende SQL-fragment kan hiervoor worden gebruikt:

DROP DATABASE IF EXISTS `learn_project_db`;
CREATE DATABASE `learn_project_db`;
USE `learn_project_db`;
CREATE TABLE `user_table` (
  `user_email` varchar(50) PRIMARY KEY,
  `user_password` varchar(50) NOT NULL
);
INSERT INTO `user_table` (`user_email`, `user_password`) VALUES
('test1@example.com', '123'),
('test2@example.com', '1234'),
('test3@example.com', '12345');
 

In eerste instantie gaan we controleren wat er zal gebeuren als we de ATTR_ERRMODE niet instellen en we hebben een fout in de SQL-query. Maak een PHP-bestand met de naam default.php en probeer dit:

<?php
    $server = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "learn_project_db";
    $conn = new PDO("mysql:host=$server;dbname=$db_name",$db_username,$db_password);
    $sql_query = "SELECT * FROM wrong_user_table";
    $stmt = $conn->prepare($sql_query);
    $stmt->execute();
    $result_set = $stmt->fetchAll();
    var_dump($result_set);
    /*Get the current error mode of PDO*/
    $current_error_mode = $conn->getAttribute(PDO::ATTR_ERRMODE);
    echo "<br>";
    echo "Value of PDO::ATTR_ERRMODE: ".$current_error_mode; 
?>
 

Merk op dat de tabelnaam ' wrong_user_table in de query die niet is gedefinieerd in de database die we eerder hebben gemaakt. Maar omdat we de ATTR_ERRMODE niet hebben ingesteld, wordt het script uitgevoerd zonder uitzondering te maken of een waarschuwing te geven. Het zal een lege array als resultaatset uitvoeren. We moeten ook opmerken dat de waarde van PDO::ATTR_ERRMODE 0 is.

Nu gaan we controleren wat er zal gebeuren als we de ATTR_ERRMODE met waarde PDO::ERRMODE_WARNING en er is een fout PDO::ERRMODE_WARNING in de SQL-query. Maak een PHP-bestand met de naam warning.php en probeer dit:

<?php
    $server = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "learn_project_db";
    $conn = new PDO("mysql:host=$server;dbname=$db_name",$db_username,$db_password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);    
    $sql_query = "SELECT * FROM wrong_user_table";
    $stmt = $conn->prepare($sql_query);
    $stmt->execute();
    $result_set = $stmt->fetchAll();
    var_dump($result_set);
    /*Get the current error mode of PDO*/
    $current_error_mode = $conn->getAttribute(PDO::ATTR_ERRMODE);
    echo "<br>";
    echo "Value of PDO::ATTR_ERRMODE: ".$current_error_mode; 
?>
 

Uitgang van warning.php is:

Warning: PDOStatement::execute(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'learn_project_db.wrong_user_table' doesn't exist in E:\xampp\htdocs\oop\db.php on line 10
array(0) { } 
Value of PDO::ATTR_ERRMODE: 1
 

Deze keer als we de waarde ATTR_ERRMODE met PDO::ERRMODE_WARNING , wordt er een waarschuwingsbericht weergegeven. Het script wordt met succes uitgevoerd en toont een lege array als uitvoer met de waarde van PDO::ATTR_ERRMODE van 1.

Eindelijk gaan we controleren wat er zal gebeuren als we de ATTR_ERRMODE met waarde PDO::ERRMODE_EXCEPTION en er is een fout PDO::ERRMODE_EXCEPTION in de SQL-query. Maak een PHP-bestand met de naam error.php en probeer dit:

<?php
    $server = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "learn_project_db";
    $conn = new PDO("mysql:host=$server;dbname=$db_name",$db_username,$db_password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
    $sql_query = "SELECT * FROM wrong_user_table";
    $stmt = $conn->prepare($sql_query);
    $stmt->execute();
    $result_set = $stmt->fetchAll();
    var_dump($result_set);
    /*Get the current error mode of PDO*/
    $current_error_mode = $conn->getAttribute(PDO::ATTR_ERRMODE);
    echo "<br>";
    echo "Value of PDO::ATTR_ERRMODE: ".$current_error_mode; 
?>
 

Output van error.php is:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'learn_project_db.wrong_user_table' doesn't exist' in E:\xampp\htdocs\oop\db.php:10 Stack trace: #0 E:\xampp\htdocs\oop\db.php(10): PDOStatement->execute() #1 {main} thrown in E:\xampp\htdocs\oop\db.php on line 10
 

Deze keer als we de waarde ATTR_ERRMODE met PDO::ERRMODE_EXCEPTION , wordt PDOException gegenereerd die een fatale fout genereert. Het script stopt met uitvoeren nadat de uitzondering is gegenereerd. Dit is de meest gebruikelijke methode om databasequery-gerelateerde fouten af te handelen. Meestal stellen we het kenmerk ATTR_ERRMODE met deze waarde in om elke uitzondering af te handelen die zich mogelijk in een SQL-query bevindt.