PDO er en klasse i PHP, der bruges til at oprette forbindelse til og lave SQL-opslag i en MySQL- eller MariaDB-database. PDO har den fordel over f.eks. mysqli, at man med PDO kan installere drivere, så man med PDO og PHP kan programmere applikationer til andre databaser, f.eks. MSSQL.
Forbindelse til database
<?php
/**
* Database credentials
*/
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'music';
/**
* Data Source Name
*/
$dsn = 'mysql:host=' . $host . ';dbname=' . $dbname . ';charset=utf8mb4';
/**
* Forbindelse til database
*/
$conn = new PDO( $dsn, $user, $password );
/**
* 1. Sættes til, at data skal returneres som objekter
* Man kan også få data som associative arrays
* 2. Sættes til, at errors throws exceptions
*/
$conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
CRUD
Create Read Update Delete
INSERT (create)
<?php
// en SQL-sætning til at indsætte data
// spørgsmålstegn er placeholders til prepared statements
$sql = "INSERT INTO table_name ( table_row1, table_row2 )
VALUES (?, ?)";
// SQL-sætning prepares og sende til database
$stmt = $conn->prepare( $sql );
$stmt->execute( [ 'value_1', 'value_2'] );
SELECT (read)
<?php
/**
* SQL-sætning
til at hente data fra tabellen musicdb
*/
$sql = "SELECT * FROM musicdb";
/**
* Statement
* Her sendes forespørgsel til database
*/
$stmt = $conn->query( $sql );
/**
* Data udskrives
* Property-name er tilsvarende kolonnenavne i database
*/
while ( $row = $stmt->fetch() ) {
echo '<p>' . $row->artist . '</p>';
}
UPDATE
<?php
//en SQL-sætning til at opdatere data
//for at ændre data det rigtige sted er det vigtigt at have en WHERE-klausul for ikke at lave ændringer i alle rækker, der i dette tilfælde er, hvor id er 28.
$sql = "UPDATE musicdb
SET track = ?, album = ?, year = ?
WHERE id = ?";
$stmt = $conn->prepare( $sql );
$stmt->execute( [ 'thriller', 'thriller', 1984, 28] );
$conn->query($sql);
DELETE
<?php
//en SQL-sætning til at slette data
//hele rækken i tabellen, hvor id er 1 bliver slettet
$sql = "DELETE FROM musicdb
WHERE id = ?";
$stmt->$conn->prepare( $sql );
$stmt->execute( [ 43 ] );
Positional og Named parameters
I eksemplerne over er der brugt positional parameters. Dvs. spørgsmålstegnene i en SQL-query bliver erstattet af argumenter i den rækkefølge de kommer i i det indsatte array i execute-metoden. Bruger man named parameters er rækkefølgen underordnet.
$sql = "SELECT * FROM musicdb
WHERE year = :year AND rating > :rating";
$stmt->execute( [':year' => 1984, ':rating' => 5] );
I execute-metoden indsættes stadig et array, men her et associative array.