sql >> Database >  >> RDS >> Database

Eenvoudige CRUD-bewerking met PDO-databaseverbinding

Databases zijn overal en er is geen praktische PHP-toepassing die zou kunnen bestaan ​​zonder een database. Vanaf het allereerste begin biedt PHP verschillende manieren om te communiceren met alle populaire DBMS. Twee populaire manieren om te communiceren met op MySQL gebaseerde databases zijn bijvoorbeeld mysql en mysqli.

In de loop der jaren hebben databases een lange weg afgelegd en nu bieden verschillende leveranciers populaire DBMS aan voor moderne PHP-apps. Om ontwikkelpraktijken te standaardiseren en te stroomlijnen, heeft PHP PHP Data Objects (PDO) geïntroduceerd in PHP 5.1. Deze objecten worden gebruikt om PDO-databaseverbindingen in te stellen.

PDO is een databasetoegangslaag die een snelle en consistente interface biedt voor toegang tot en beheer van databases in PHP-applicaties. Elke DBMS heeft specifieke PDO-stuurprogramma('s) die moeten worden geïnstalleerd wanneer u PDO in PHP-toepassingen gebruikt.

Ondersteunde databases

Naam stuurprogramma Ondersteunde database

PDO_CUBRID Cubrid
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird
PDO_IBM IBM DB2
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x/5.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC en win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 en SQLite 2
PDO_SQLSRV Microsoft SQL Server / SQL Azure
PDO_4D 4D

Standaard heeft PHP het PDO_SQLite-stuurprogramma geïnstalleerd. Als u echter met andere databases wilt werken, moet u eerst het betreffende stuurprogramma installeren.

om te controleren welke stuurprogramma's op uw systeem zijn geïnstalleerd, maakt u een nieuw PHP-bestand en voegt u er het volgende codefragment aan toe:

<?php

print_r(PDO::getAvailableDrivers());

?>

Werken met BOB

PDO vervangt alle eerdere benaderingen van database-interactie. Met PDO kunt u gemakkelijk CRUD- en gerelateerde DBMS-bewerkingen uitvoeren. In feite fungeert PDO als een laag die databasegerelateerde bewerkingen scheidt van de rest van de code.

Misschien vind je dit ook leuk:  Eenvoudige CRUD in PHP en MySQL

Connectiviteit

Een van de belangrijkste voordelen van PDO is de eenvoudige en zeer ongecompliceerde databaseconnectiviteit. Overweeg het volgende codefragment dat wordt gebruikt om verbindingen met de database tot stand te brengen. Merk op dat wanneer het onderliggende DBMS verandert, de enige wijziging die u hoeft aan te brengen het databasetype is.

<?php

Class Connection {

private  $server = "mysql:host=localhost;dbname=cloudways";

private  $user = "root";

private  $pass = "";

private $options  = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,);

protected $con;
 
          	public function openConnection()

           	{

               try

                 {

	        $this->con = new PDO($this->server, $this->user,$this->pass,$this->options);

	        return $this->con;

                  }

               catch (PDOException $e)

                 {

                     echo "There is some problem in connection: " . $e->getMessage();

                 }

           	}

public function closeConnection() {

   	$this->con = null;

	}

}

?>

Merk in het bovenstaande codefragment op dat het DBMS MySQL is. Als het DBMS echter verandert in MS SQL Server, is de enige verandering de vervanging van mysql met mssql.

Opmerking: PDO kan uitzonderingen aan. Wikkel daarom de bewerking altijd in een try and catch-blok.


Stop met het verspillen van tijd aan servers

Cloudways regelt het serverbeheer voor u, zodat u zich kunt concentreren op het maken van geweldige apps en het tevreden houden van uw klanten.

Begin gratis


Een tabel maken met PDO

Om een ​​tabel te maken, declareert u eerst een queryreeks en voert u deze vervolgens uit met exec functie omdat er geen gegevens worden geretourneerd.

<?php

include_once 'connection.php';

try

{

     $database = new Connection();

     $db = $database->openConnection();

     // sql to create table

     $sql = "CREATE TABLE `Student` ( `ID` INT NOT NULL AUTO_INCREMENT , `name`VARCHAR(40) NOT NULL , `last_ame` VARCHAR(40) NOT NULL , `email` VARCHAR(40)NOT NULL , PRIMARY KEY (`ID`)) ";

     // use exec() because no results are returned

     $db->exec($sql);

     echo "Table Student created successfully";

     $database->closeConnection();

}

catch (PDOException $e)

{

    echo "There is some problem in connection: " . $e->getMessage();

}

?>

Gegevens invoegen met PDO

Om gegevens in een tabel in te voegen met behulp van PDO, bereidt u eerst de query voor met behulp van prepare uitspraak. Vervolgens wordt deze query uitgevoerd met de execute functie. Merk op dat deze praktijk SQL-injectie-aanvallen voorkomt.

<?php

include_once 'connection.php';

try

{

    $database = new Connection();

    $db = $database->openConnection();

    // inserting data into create table using prepare statement to prevent from sql injections

    $stm = $db->prepare("INSERT INTO student (ID,name,last_name,email) VALUES ( :id, :name, :lastname, :email)") ;

    // inserting a record

    $stm->execute(array(':id' => 0 , ':name' => 'Saquib' , ':lastname' => 'Rizwan' , ':email' => '[email protected]'));

    echo "New record created successfully";

}

catch (PDOException $e)

{

    echo "There is some problem in connection: " . $e->getMessage();

}

?>

Selecteer gegevens met PDO

Om gegevens te selecteren, maakt u eerst een queryreeks en voert u deze vervolgens uit in een voor elk loop om records uit de tabel op te halen.

<?php

include_once 'connection.php';

try

{

    $database = new Connection();

    $db = $database->openConnection();

    $sql = "SELECT * FROM student " ;

    foreach ($db->query($sql) as $row) {

    echo " ID: ".$row['ID'] . "<br>";

    echo " Name: ".$row['name'] . "<br>";

    echo " Last Name: ".$row['last_name'] . "<br>";

    echo " Email: ".$row['email'] . "<br>";

    }

}

catch (PDOException $e)

{

    echo "There is some problem in connection: " . $e->getMessage();

}

?>

Gegevens bijwerken met BOB

Om een ​​record in de tabel bij te werken, declareert u eerst een queryreeks en voert u deze vervolgens uit met exec functie.

<?php

include_once 'connection.php';

try

{

     $database = new Connection();

     $db = $database->openConnection();

     $sql = "UPDATE `student` SET `name`= 'yourname' , `last_name` = 'your lastname' , `email` = 'your email' WHERE `id` = 8" ;

     $affectedrows  = $db->exec($sql);

   if(isset($affectedrows))

    {

       echo "Record has been successfully updated";

    }          

}

catch (PDOException $e)

{

    echo "There is some problem in connection: " . $e->getMessage();

}

?>

Gegevens verwijderen met PDO

Om een ​​record uit de tabel te verwijderen, declareert u eerst een queryreeks en voert u deze vervolgens uit met exec functie.

<?php

include_once 'connection.php';

try

{

     $database = new Connection();

     $db = $database->openConnection();

     $sql = "DELETE FROM student WHERE `id` = 8" ;

     $affectedrows  = $db->exec($sql);

   if(isset($affectedrows))

    {

       echo "Record has been successfully deleted";

    }          

}

catch (PDOException $e)

{

   echo "There is some problem in connection: " . $e->getMessage();

}

?>

Conclusie

PDO is de gegevenstoegangslaag die het proces van verbinding maken met en werken met databases aanzienlijk vereenvoudigt. Misschien is het beste aan PDO het gestroomlijnde proces van databasemigratie. Als je je BOB-query's met iterators wilt versnellen, bekijk dan dit artikel van Michelangelo van Dam.

In dit artikel heb ik PDO geïntroduceerd en benadrukt hoe je CRUD-acties kunt uitvoeren met PDO in PHP. Ik demonstreerde ook het opzetten van PDO-databaseverbindingen. Als je vragen hebt of iets wilt toevoegen aan de discussie, laat dan hieronder een reactie achter.


  1. bewerking niet toegestaan ​​wanneer het object is gesloten bij het uitvoeren van een meer geavanceerde query

  2. Ik kan my.cnf niet vinden op mijn Windows-computer

  3. Asynchrone taken met Django en Celery

  4. Hoe NOT LIKE werkt in MySQL