# crash course PHP PDO
## PDO Connection
Creer une BD nomme webclaPost
creer un tableau post with attributes id,title, author, content,is_published.
```php
<?php
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'webclaPost';
// Set DSN
$dsn = 'mysql:host='. $host .';dbname='. $dbname;
// Create a PDO instance
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
```
## PDO Query
possible FETCH_MODE values
- PDO::FETCH_ASSOC : renvoie un tableau indexé par le nom de la colonne tel qu'il apparaît dans votre jeu de résultats.
- PDO::FETCH_BOTH (default) : renvoie un tableau indexé à la fois par le nom de la colonne et par le numéro de la colonne indexée à 0, tel que renvoyé dans votre jeu de résultats.
- PDO::FETCH_OBJ : renvoie un objet anonyme dont les noms de propriétés correspondent aux noms des colonnes retournées dans votre jeu de résultats.
### fetch
Recuperer un seule element
introduction au statement prepaper
```php
# PRDO QUERY
$stmt = $pdo->query('SELECT * FROM posts');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo $row['title'] . '<br>';
}
while($row = $stmt->fetch(PDO::FETCH_OBJ)){
echo $row->title . '<br>';
}
# PREPARED STATEMENTS (prepare & execute)
// UNSAFE
$sql = "SELECT * FROM posts WHERE author = '$author'";
$stmt = $pdo->query($sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo $row['title'] . '<br>';
}
// FETCH SINGLE POST
$sql = 'SELECT * FROM posts WHERE id = :id';
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => $id]);
$post = $stmt->fetch();
echo $post->body;
GET ROW COUNT
$stmt = $pdo->prepare('SELECT * FROM POSTS WHERE author = ?');
$stmt->execute([$author]);
$postCount = $stmt->rowCount();
echo $postCount;
```
### fetchAll
Recuperer plusieur post a la fois
```php
// FETCH MULTIPLE POSTS
// User Input
$author = 'Patrick';
$is_published = true;
$id = 1;
$limit = 1;
// Positional Params
$sql = 'SELECT * FROM posts WHERE author = ? && is_published = ? LIMIT ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$author, $is_published, $limit]);
$posts = $stmt->fetchAll();
// Named Params
$sql = 'SELECT * FROM posts WHERE author = :author && is_published = :is_published';
$stmt = $pdo->prepare($sql);
$stmt->execute(['author' => $author, 'is_published' => $is_published]);
$posts = $stmt->fetchAll();
//var_dump($posts);
foreach($posts as $post){
echo $post->title . '<br>';
}
```
## INSERT DATA
inserer des donnee
```php
// INSERT DATA
$title = 'Post Five';
$body = 'This is post five';
$author = 'Kevin';
$sql = 'INSERT INTO posts(title, body, author) VALUES(:title, :body, :author)';
$stmt = $pdo->prepare($sql);
$stmt->execute(['title' => $title, 'body' => $body, 'author' => $author]);
echo 'Post Added';
```
## UPDATE DATA
mettre a jours les champs donnee
```php
// UPDATE DATA
$id = 1;
$body = 'This is the updated post';
$sql = 'UPDATE posts SET body = :body WHERE id = :id';
$stmt = $pdo->prepare($sql);
$stmt->execute(['body' => $body, 'id' => $id]);
echo 'Post Updated';
```
## DELETE
supprimer un post en passant le id en paramettre
```php
// DELETE DATA
$id = 3;
$sql = 'DELETE FROM posts WHERE id = :id';
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => $id]);
echo 'Post Deleted';
```
### SEARCH DATA
chercher un post par rapport a son titre
```php
// SEARCH DATA
$search = "%f%";
$sql = 'SELECT * FROM posts WHERE title LIKE ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$search]);
$posts = $stmt->fetchAll();
foreach($posts as $post){
echo $post->title . '<br>';
}
```