alexa  Menu
phpkonf

PHP PDO ile veritabanına veri ekleme

  06.04.2020 ,   1 yorum ,   10.756 kez okundu.

PHP PDO ile veritabanına bağlanma ve veritabanı oluşturma ile ilgili paylaşımlar yapmıştım. Şimdi devamı olarak oluşturduğumuz veritabanına nasıl veri ekleyebileceğimize bir bakalım. Bildiğimiz gibi PDO SQL injection açıklarına karşı birtakım önlemler aldığı için veritabanına veri eklememiz daha güvenli hale geliyor. Ama tabiki bu kesin bir çözüm değil. Yani PDO kullanıyorsam  tamamen korunaklı bir sisteme sahibim demek değil.

PDO ile veritabanına veri eklemek için birkaç farklı sorgu yazma şekli mevcut. Sırasıyla hepsini göstermeye çalışacağım.

Aşağıdaki kodumuzu ele alalım mesela:

$isim='Anar';
$soyisim='Samadov';
$eposta='[email protected]';

//prepare methodu ile insert sorgumuzu yazıyoruz fakat değerler yerine gerçek değerleri yazmıyoruz
$stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (:isim, :soyisim, :email)");

//gerçek değerleri güvenlik sebebi ile sonradan bind ediyoruz
$result1=$stmt->execute(array(":isim"=>$isim, ":soyisim"=>$soyisim, ":email"=>$eposta));

Önceden belirtilen değişkenlerdeki verileri (bu verile kullanıcı tarafından veya herhangi bir servisten de gelmiş olabilir) sorgumuza :parametreAdı olarak ekliyoruz ve daha sonra execute metodunu çağırarak içinde array listesinde değişkenlerimizi sorguda belirttiğimiz isimlerle gönderiyoruz. Bu sekilde yapıldığında değişkende gönderilebilecek kötü amaçlı karakter ve sorgular PDO tarafından temizlenmiş veya dikkate alınmamış oluyor.

Bir diğer yöntem:

$isim='Banu';
$soyisim='Samadova';
$eposta='[email protected]';

//prepare methodu ile insert sorgumuzu yazmanın bir diğer yöntemi
$stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (?,?,?)");

//değerleri bind etmenin bir diğer yöntemi
$result2=$stmt->execute(array($isim, $soyisim, $eposta));

Bir önceki yöntemle aynı sadece burada sorgu içerisindeki parametrelere isim vermek yerine sadece soru işareti kullanılmış. Daha sonra execute işleminde yukarıdakı sıraya uygun gelecek seşkilde değişkenler gönderilmiş.

Göstereceğim son yöntem:

$isim='Aişe';
$soyisim='Samadova';
$eposta='[email protected]';

//prepare methodu ile insert sorgumuzu yazmanın bir diğer yöntemi
$stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (:isim, :soyisim, :email)"); 

//değerleri bind etmenin bir diğer yöntemi
$stmt->bindValue(':isim', $isim, PDO::PARAM_STR);
$stmt->bindValue(':soyisim', $soyisim, PDO::PARAM_STR);
$stmt->bindValue(':email', $eposta, PDO::PARAM_STR);
$result3=$stmt->execute(); //eğer başarılı bir insert işlemi olduysa sonuç true döner.

Son yöntemimizde biraz daha uzun bir yol izlemiş oluyoruz. Yine sorgumuzda parametre isimlerini belirtiyoruz ve daha sonra bindValue veya bindParam metodunu kullanarak tek tek belirttiğimiz parametrelere değişkenlerimizi set ediyoruz.

Bu yöntemleri kullanarak PHP PDO ile verilerinizi veritabanına ekleye bilirsiniz.

Son olarak tam çalışır bir şekilde tüm scripti paylaşıyorum:

<?php

    $host = "localhost";
    $username = "root";
    $password = "123456";
    $dbname = "myPdoDatabase";

    try {
        //veritabanı bağlantı satırı
        $conn = new PDO("mysql:host=$host;", $username, $password);
        //  Öznitelik tanımlaması
        //  PDO::ATTR_ERRMODE: Hata raporlama.
        //  PDO::ERRMODE_SILENT: Sadece hata kodlarını atar.
        //  PDO::ERRMODE_WARNING: Bir E_WARNING çıktılanır.
        //  PDO::ERRMODE_EXCEPTION: Bir istisna oluşur.
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        //Belirtilen veritabanı yoksa oluştur
        $sql = "CREATE DATABASE IF NOT EXISTS $dbname";
        //SQL sorgusunu çalıştır
        $conn->exec($sql);
        $conn=null;

        //Yukarıda belirtilen veritabanına bağlan. Her iki halde veritabanı olacak. Ya önceden vardı ya da yeni oluşturuldu.
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        //isimler tablosu yoksa oluştur
        $sql = "CREATE TABLE IF NOT EXISTS isimler (
                id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
                isim VARCHAR(30) NOT NULL,
                soyisim VARCHAR(30) NOT NULL,
                email VARCHAR(50)
                )";

        //sql sorgusunu çalıştır
        $conn->exec($sql);

        $isim='Anar';
        $soyisim='Samadov';
        $eposta='[email protected]';

        //prepare methodu ile insert sorgumuzu yazıyoruz fakat değerler yerine gerçek değerleri yazmıyoruz
        $stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (:isim, :soyisim, :email)");

        //gerçek değerleri güvenlik sebebi ile sonradan bind ediyoruz
        $result1=$stmt->execute(array(":isim"=>$isim, ":soyisim"=>$soyisim, ":email"=>$eposta));

        $isim='Banu';
        $soyisim='Samadova';
        $eposta='[email protected]';

        //prepare methodu ile insert sorgumuzu yazmanın bir diğer yöntemi
        $stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (?,?,?)");

        //değerleri bind etmenin bir diğer yöntemi
        $result2=$stmt->execute(array($isim, $soyisim, $eposta));

        $isim='Aişe';
        $soyisim='Samadova';
        $eposta='[email protected]';

        //prepare methodu ile insert sorgumuzu yazmanın bir diğer yöntemi
        $stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (:isim, :soyisim, :email)");
        
        //değerleri bind etmenin bir diğer yöntemi
        $stmt->bindValue(':isim', $isim, PDO::PARAM_STR);
        $stmt->bindValue(':soyisim', $soyisim, PDO::PARAM_STR);
        $stmt->bindValue(':email', $eposta, PDO::PARAM_STR);
        $result3=$stmt->execute(); //eğer başarılı bir insert işlemi olduysa sonuç true döner.
  
    }
    catch (PDOException $e) {
        echo "Hata kodu: " . $e->getCode() . "<br> Hata mesajı: " . $e->getMessage();
        $conn = null;
    }

?>

1 yorum yapılmış

    ali

    Kodlar sorunsuz çalışıyor, teşekkürler.

    23.04.2020, 18:14:43

Yorum yapın..

isim yerine gerçek isim ve soyisim yazılmadan yapılan yorumlar kesinlikle onaylanmıyor bilginiz olsun.


The reCAPTCHA verification period has expired. Please reload the page.