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.
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.
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 |
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
);
// 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
Installeren:
Hoe PDO te installeren als je het niet hebt
Gidsen:
W3Schools tutorial
Tuts + Tutorial (aanbevolen)
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.