Php PDO ile MySQL Bağlantısı ve CRUD İşlemleri

  • Yazar Mehmet Kaplan
  • 2 yıl önce
  • 1205
  • 9 Dakika
CrytoTap Browser

Pdo Nedir ?

Bu yazımızda Php PDO kullanımını anlatacağım. Öncelikle PDO, PHP Data Object (PHP Veri Nesneleri) kısaltmasıdır. PDO, desteklediği veritabanları için ortak metot ve özellikleri barındıran bir Object Oriented Programming (Nesne Yönelimli Programlama) sınıfıdır.

PDO sınıfını kullanarak, PDO için oluşturulmuş veritabanı sürücülerinde/sistemlerinde veri ekleme, seçme, güncelleme vb. işlemlerini yapmaya imkan verir.

PDO veritabanı sürücüleri / ile kullanılabilir veritabanları;

  • CUBRID
  • MS SQL Sunucusu
  • Firebird/Interbase
  • IBM
  • Informix
  • MySQL
  • MS SQL Server
  • Oracle
  • ODBC ve DB2
  • PostgreSQL
  • SQLite
  • PDO_4D

PDO ne işe yarar?

PHP 5 ile birlikte gelen OOP desteğiyle, OOP ile uygulama geliştirmenin kolaylığı ve esnekliği PHP’ye de gelmiştir.

PDO, PHP’nin OOP desteği sayesinde, PHP geliştiricileri tarafından yazılmış veritabanı işlemleri için ortak bir yapı sunar.

PDO öncesinde her bir veritabanı için farklı bir fonksiyon veya eklenti kullanılıyordu (MySQL için mysql_, ODBC için odbc_, Oracle için oci_ vb.).

Ancak PHP ile geliştirilen uygulamadaki veritabanı sistemin değiştirilmesiyle tüm kodların yeniden düzenlenmesi gerekir.

PDO sayesinde sadece veritabanı bağlantısı parametresini yeni veritabanı sistemine göre yapılması yeterli olacaktır.

PDO içerisinde bulunan ön hazırlık sorgu yapısı sayesinde SQL Injection gibi istemeyen durumlar içinde çözüm sunar.

Özetle; PDO yapısını öğrenerek desteklediği tüm veritabanı sistemleri üzerinde işlem yapabilirsiniz.

Ayrıca PDO bir OOP sınıfı olduğundan kalıtım alınarak genişletilebilir.

Örnek Kod

baglan.php

<?php
try {
    $db_host    = 'localhost'; // sunucu veya hostingadınız
    $db_adi     = ''; // hostingde çalışan veritabanı adınız
    $db_kul     = ''; //veri kullanıcısı adınız buraya
    $db_sifre   = ''; // veri tabanı kullanıcı parolası buraya
    $charset    = 'utf8'; // burası standart ellemeyin

    $conn = new PDO("mysql:host=$db_host;dbname=$db_adi;charset=$charset", $db_kul, $db_sifre);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->query("SET NAMES utf8"); 
    $conn->query("SET CHARACTER SET utf8");
    $conn->query("SET COLLATION_CONNECTION = \"utf8_turkish_ci\"");
    $conn->exec("SET NAMES 'utf8'; SET CHARSET 'utf8'");
    
} catch (PDOException $e) {
    echo 'Bağlantı Hatası: ' . $e->getMessage();
}
?>

index.php

<?php
 
include "baglan.php";
 
if(isset($_GET['sil'])){
    $sqlsil="DELETE FROM `ogrenci` WHERE `ogrenci`.`ogrno` = ?";
    $sorgusil=$baglan->prepare($sqlsil);
    $sorgusil->execute([
        $_GET['sil']
    ]);
 
    header('Location:index.php');
 
}
 
$sql ="SELECT * FROM ogrenci";
$sorgu = $baglan->prepare($sql);
$sorgu->execute();
 
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tasarım Kodlama</title>
    <!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
</head>
<body>
    
    <header>
        <div class="container">
            <div class="row">
                <div class="col">
                    <h1 class="display-1 text-center">Tasarım Kodlama</h1>
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <div class="btn-group">
                        <a href="index.php" class="btn btn-outline-primary">Tüm Öğrenciler</a>
                        <a href="ekle.php" class="btn btn-outline-primary">Öğrenci Ekle</a>
                    </div>
                </div>
            </div>
        </div>
    
    </header>
    <main>
        <div class="container">
            <div class="row mt-4">
                <div class="col">
                    <table class="table table-hover table-dark table-striped">
                        <thead>
                            <tr>
                                <th>No</th>
                                <th>Ad</th>
                                <th>Soyad</th>
                                <th>İşlem</th>
                            </tr>
                        </thead>
                        <tbody>
                        <?php while($satir = $sorgu->fetch(PDO::FETCH_ASSOC)) { ?>
                            <tr>
                                <td><?=$satir['ogrno']?></td>
                                <td><?=$satir['ograd']?></td>
                                <td><?=$satir['ogrsoyad']?></td>
                                <td>
                                    <div class="btn-group">
                                        <a href="detay.php?ogrno=<?=$satir['ogrno']?>" class="btn btn-success">Detay</a>
                                        <a href="guncelle.php?ogrno=<?=$satir['ogrno']?>" class="btn btn-secondary">Güncelle</a>
                                        <a href="?sil=<?=$satir['ogrno']?>" onclick="return confirm('Silinsin mi?')" class="btn btn-danger">Kaldır</a>
                                    </div>
                                </td>
                            </tr>
                        <?php } ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    
    </main>
    <footer></footer>
</body>
</html>

ekle.php

<?php
 
if(isset($_POST["kaydet"]))
{
    include "baglan.php";
    $sql = "INSERT INTO `ogrenci` (`ogrno`, `ograd`, `ogrsoyad`, `cinsiyet`, `dtarih`, `sinif`, `puan`) VALUES (NULL, ?, ?, ?, ?, ?, '0');";
    $dizi =[
        $_POST["ad"],
        $_POST["sad"],
        $_POST["cins"],
        $_POST["dtarih"],
        $_POST["sinif"]
    ];
 
    $sth = $baglan->prepare($sql);
   $sonuc = $sth->execute($dizi);
   header("Location:index.php");
}
 
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tasarım Kodlama</title>
    <!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
</head>
<body>
    
    <header>
        <div class="container">
            <div class="row">
                <div class="col">
                    <h1 class="display-1 text-center">Tasarım Kodlama</h1>
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <div class="btn-group">
                        <a href="index.php" class="btn btn-outline-primary">Tüm Öğrenciler</a>
                        <a href="ekle.php" class="btn btn-outline-primary">Öğrenci Ekle</a>
                    </div>
                </div>
            </div>
        </div>
    
    </header>
    <main>
    <div class="container">
        <form action="" method="post" class="row mt-4 g-3">
            <div class="col-6">
                <label for="ad" class="form-label">Adınız</label>
                <input type="text" class="form-control" name="ad">
            </div>
            <div class="col-6">
                <label for="sad" class="form-label">Soyadınız</label>
                <input type="text" class="form-control" name="sad">
            </div>
            <div class="col-6">
                <label for="sinif" class="form-label">Sınıf</label>
                <input type="text" class="form-control" name="sinif">
            </div>
            <div class="col-6">
                <label for="dtarih" class="form-label">Doğum Tarihi</label>
                <input type="date" class="form-control" name="dtarih">
            </div>
            <div class="col">
                <label for="" class="form-label">Kız
                    <input type="radio" name="cins" value="K">
                </label>
                <label for="" class="form-label">Erkek
                    <input type="radio" name="cins" value="E">
                </label>
            </div>
            <button type="submit" name="kaydet" class="btn btn-primary">Kaydet</button>
        </form>
    </div>
    </main>
    <footer></footer>
</body>
</html>

guncelle.php

<?php
 
include "baglan.php";
 
if(isset($_POST['guncelle'])){
 
    $sql = "UPDATE `ogrenci` 
        SET `ograd` = ?, 
            `ogrsoyad` = ?, 
            `dtarih` = ?, 
            `sinif` = ? WHERE `ogrenci`.`ogrno` = ?";
    $dizi=[
        $_POST['ad'],
        $_POST['sad'],
        $_POST['dtarih'],
        $_POST['sinif'],
        $_POST['ogrno']
    ];
    $sorgu = $baglan->prepare($sql);
    $sorgu->execute($dizi);
 
    header("Location:index.php");
}
 
$sql ="SELECT * FROM ogrenci WHERE ogrno = ?";
$sorgu = $baglan->prepare($sql);
$sorgu->execute([
    $_GET['ogrno']
]);
$satir = $sorgu->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tasarım Kodlama</title>
    <!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
</head>
<body>
    
    <header>
        <div class="container">
            <div class="row">
                <div class="col">
                    <h1 class="display-1 text-center">Tasarım Kodlama</h1>
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <div class="btn-group">
                        <a href="index.php" class="btn btn-outline-primary">Tüm Öğrenciler</a>
                        <a href="ekle.php" class="btn btn-outline-primary">Öğrenci Ekle</a>
                    </div>
                </div>
            </div>
        </div>
    
    </header>
    <main>
    <div class="container">
        <form action="" method="post" class="row mt-4 g-3">
            <input type="hidden" name="ogrno" value="<?=$satir['ogrno']?>">
            <div class="col-6">
                <label for="ad" class="form-label">Adınız</label>
                <input type="text" class="form-control" name="ad" value="<?=$satir['ograd']?>">
            </div>
            <div class="col-6">
                <label for="sad" class="form-label">Soyadınız</label>
                <input type="text" class="form-control" name="sad" value="<?=$satir['ogrsoyad']?>">
            </div>
            <div class="col-6">
                <label for="sinif" class="form-label">Sınıf</label>
                <input type="text" class="form-control" name="sinif" value="<?=$satir['sinif']?>">
            </div>
            <div class="col-6">
                <label for="dtarih" class="form-label">Doğum Tarihi</label>
                <input type="date" class="form-control" name="dtarih" value="<?=$satir['dtarih']?>">
            </div>
            <button type="submit" name="guncelle" class="btn btn-primary">Güncelle</button>
        </form>
    </div>
    </main>
    <footer></footer>
</body>
</html>

detay.php

<?php
 
include "baglan.php";
 
$sql ="SELECT * FROM ogrenci WHERE ogrno = ?";
$sorgu = $baglan->prepare($sql);
$sorgu->execute([
    $_GET['ogrno']
]);
$satir = $sorgu->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tasarım Kodlama</title>
    <!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
</head>
<body>
    
    <header>
        <div class="container">
            <div class="row">
                <div class="col">
                    <h1 class="display-1 text-center">Tasarım Kodlama</h1>
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <div class="btn-group">
                        <a href="index.php" class="btn btn-outline-primary">Tüm Öğrenciler</a>
                        <a href="ekle.php" class="btn btn-outline-primary">Öğrenci Ekle</a>
                    </div>
                </div>
            </div>
        </div>
    
    </header>
    <main>    
    <div class="container">
        <div class="row">
            <div class="col">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">
                    <?=$satir["ograd"]?> <?=$satir["ogrsoyad"]?>
                    </h5>
                    <h6 class="card-subtitle mb-2 text-muted"><?=$satir["sinif"]?> ( <?=$satir["cinsiyet"]?>)</h6>
                    <p class="card-text"><?=$satir["dtarih"]?></p>
 
                </div>
                </div>
            </div>
        </div>
    </div>
    </main>
    <footer></footer>
</body>
</html>

Bu yazımızda burada bitmiş bulunmakta. Hayırlı çalışmalar dilerim.

Crud PDO Create PDO Delete PDO Read PDO Update Php

Bir yanıt yazın

Yorumlar (1)