windows 7 php kurulumu

PHP PDO ile veritabanına veri ekleme

110 kez okundu  Yorum yapılmamış  2019.02.17

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;
    }

?>

etiketler: #pho ile veri ekleme , #php pdo ile insert işlemi , #php pdo nedir

Yorum yapın..

Blogda ara

abone ol