Looking for pdo Answers? Try Ask4KnowledgeBase
Looking for pdo Keywords? Try Ask4Keywords

pdoKomma igång med pdo


Anmärkningar

Det här avsnittet ger en översikt över vad pdo är och varför en utvecklare kanske vill använda den.

Det bör också nämna alla stora ämnen inom pdo och länka till relaterade ämnen. Eftersom dokumentationen för pdo är ny kan du behöva skapa initialversioner av relaterade ämnen.

Installation eller installation

PDO är ett universellt databasanslutningskommando i PHP, det stöder 12 olika databastyper, t.ex. MySQL, MongoDB, NoSQL . En stor bonus för PDO är att den beräknar din kod för att stödja databastypen, så du behöver inte göra någon chans när du flyttar över till ett annat databassystem.


Sammanfattning

PDO mysqli
Databasstöd 12 olika förare mysqli
API OOP OOP + processuellt
Förbindelse Lätt Lätt
Namngivna parametrar Ja Nej
Objektkartläggning Ja Ja
Förberedda uttalanden (klientsidan) Ja Nej
Prestanda Snabb Snabb
Lagrade procedurer Ja Ja

Anslutning till databasen med PDO:

Anslutningsdelen ser obekväm ut men det måste vi ta itu med. Resten av BOB är enkel och användbar, det hjälper också att göra den säkra delen ännu enklare.

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

PDO-anslutningen beställs enligt följande:

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


Säkra val från databasen med PDO:

// 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);
 

Koden du just har läst är skyddade SQL-injektioner


Handledningar:

Installera:

Hur du installerar PDO om du inte har den

guider:

W3Schools handledning
Tuts + handledning (rekommenderas)

PDO Setting Attribute Errormode

PDO :: setAttribute anger ett attribut i databashandtaget. Beskrivning av setAttribute är:

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

PDO :: ATTR_ERRMODE: Detta attribut används för felrapportering. Det kan ha ett av följande värden.

  • PDO::ERRMODE_SILENT : Om ATTR_ERRMODE inte är inställd i koden är ERRMODE_SILENT standardvärdet för attributet ATTR_ERRMODE. Den anger felkoder. I tyst läge, om det finns ett fel i SQL, kommer PDO att kasta inga undantag; PDO kommer inte att ge några varningar; det kommer helt enkelt att returnera falskt. Värdet på PDO :: ERRMODE_SILENT är 0. Skriptet körs utan att generera något fel eller varning.
  • PDO::ERRMODE_WARNING : Detta värde höjer E_WARNING. I varningsläge, om det finns ett fel i SQL, kommer PDO att utfärda varningar men skriptet fortsätter att köras. Värde på PDO :: ERRMODE_WARNING är 1. Skriptet körs med generering av varning om felet.
  • PDO::ERRMODE_EXCEPTION : Detta värde kastar undantag. I undantagsläge, om det finns ett fel i SQL, kommer PDO att kasta undantag och skriptet kommer att sluta köras. Värde på PDO :: ERRMODE_EXCEPTION är 2. Skriptet kommer att sluta exekvera generera felet som kastar undantaget.

Exempel: Nu ska vi se de olika värdena för attributet ATTR_ERRMODE med några exempel. För att göra det, skapa en databas som heter learn_project_db och sätt in en tabell som heter user_table i den. Följande SQL-kod kan användas för att uppnå det:

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');
 

Först ska vi kontrollera vad som kommer att hända om vi inte ställer in ATTR_ERRMODE och vi kommer att ha fel i SQL-frågan. Skapa en PHP-fil som heter default.php och prova detta:

<?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; 
?>
 

Lägg märke till att wrong_user_table är wrong_user_table i frågan som inte definieras i databasen vi skapade tidigare. Men eftersom vi inte ställde in ATTR_ERRMODE kommer det att köra skriptet utan att kasta något undantag eller ge någon varning. Det kommer att mata ut en tom matris som resultatuppsättning. Vi bör också märka att värdet på PDO::ATTR_ERRMODE är 0.

Nu ska vi kontrollera vad som kommer att hända om vi ställer in ATTR_ERRMODE med värdet PDO::ERRMODE_WARNING och vi kommer att ha fel i SQL-frågan. Skapa en PHP-fil som heter warning.php och prova detta:

<?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; 
?>
 

Utgång från warning.php är:

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
 

Den här gången när vi ställer in ATTR_ERRMODE med PDO::ERRMODE_WARNING värdet kommer det att visa ett varningsmeddelande. Skriptet körs framgångsrikt och visar en tom matris som utgång med värdet av PDO::ATTR_ERRMODE av 1.

Till sist kommer vi att kontrollera vad som kommer att hända om vi ställer in ATTR_ERRMODE med värdet PDO::ERRMODE_EXCEPTION och vi kommer att ha fel i SQL-frågan. Skapa en PHP-fil som heter error.php och prova detta:

<?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 of error.php är:

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
 

Den här gången när vi ställer in ATTR_ERRMODE med PDO::ERRMODE_EXCEPTION värde kommer det att kasta PDOException som genererar ett dödligt fel. Skriptet kommer att sluta köras efter att undantaget kastats. Detta är vanligast för att hantera fel i databasfrågan. Under större delen av tiden ställer vi in attributet ATTR_ERRMODE med detta värde för att hantera alla undantag som kan finnas i SQL-frågan.