# 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>'; } ```