alexa  Menu
phpkonf

PHP PDO kullanarak veritabanı ve tablo oluşturma

  03.04.2020 ,   1 yorum ,   7.338 kez okundu.

Bir önceki paylaşımımda PHP PDO kullanarak veritabanına nasıl bağlanıldığını ve bazı parametrelerin anlamını paylaşmıştım. Şimdi yine veritabanına bağlanmayı, fakat biraz daha parametrik bir kullanım şekli göstermeye çalışacağım. Şöyle ki, bir önceki paylaşımımda veritabanl adını değişkene atayarak, pdo ile mysql-e bağlanırken bu değişkeni kullanmış ve direk belirttiğimiz veritabanına bağlanmıştık. Fakat şöyle bir durum var ki, bu yöntemde veritabanının manual olarak oluşturulmuş olması şart.

Ama şimdiki paylaşımımda veritabanı ve tablonun olmadığı durumlarda otomatik olarak oluşturmasınız sağlayacağız. Yani SQL sorgumuzda eğer veritabanı yoksa belirtilen veritabanını oluştur devamında eğer belirtilen tablo yoksa onu da oluştur demeye çalışacağız.

Bir önceki paylaşımımda PDO ile MySQL veritabanına bağlanırken aşağıdaki kodu yazmıştık. Bu kod $dbname değişkeninde tanımlanan veritabanına bağlanır. Yani bu veritabanının varolması gerekiyor. Daha önceden manual olarak oluşturulmuş olması şart. Yoksa veritabanı bulunamadı diye hata alırsınız.

$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

Peki biz farklı ne yapacağız? Öncelikle bu kodda sadece dbname=$dbname kısmını kodumuzdan çıkaralım. Yani sadece aşağıdaki gibi bir kullanım şekli oluşturalım:

$conn = new PDO("mysql:host=$host;", $username, $password);

Böylece bir belirtilen host-daki mysql-imize kullanıcı adı ve kullanıcı şifresi ile bağlandık. Fakat henüz herhangi bir veritabanına bağlı değiliz. Sadece MySQL ile konuşabilir duruma geldik.

Daha sonra aşağıdaki kodu ekleyelim:

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

Yani sayfanın başında belirtilen bilgileri kullanarak MySQL ile konuşabildiğimiz için SQL sorgusu yazarak diyoruz ki, eğer $dbname değişkeninde ismi belirtilen veritabanı yoksa bir zahmet oluşturuver. Yani eğer varsa oluşturmayacak ama yoksa oluşturacak.

Sonra artık MySQL-e ile konuşabiliyoruz e bir de veritabanımız var artık ismini de biliyoruz zaten, o zaman şimdi artık bu veritabanına bağlanalım:

//Yukarıda belirtilen veritabanına bağlan. Her iki halde veritabanımız olacak. Ya önceden oluşturulmuş şekilde ya da yeni oluşturulacak.
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

Böylece artık hem MySQL ile konuşabiliyoruz hem de ismini belirttiğimiz veritabanının olduğuna eminiz ve bu veritabanına bağlıyız. Artık select, insert, update, delete ve s işlemleri yapabiliriz.

Buraya kadar herşey tamam şimdi bir de aynı şekilde tablomuzu da oluşturalım.

//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);

Bu bölümde de SQL sorgumuzda şunu belirttik. Eğer isimler adlı tablomuz yok ise bir zahmet onu da oluşturuver.

Şimdi tüm kodlarımızı birleştirelim ve çalıştıralım.

<?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);

        //Yukarıda belirtilen veritabanına bağlan. Her iki halde veritabanımız olacak. Ya önceden oluşturulmuş şekilde ya da yeni oluşturulacak.
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

        //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);
  
    }
    catch (PDOException $e) {
        echo "Hata kodu: " . $e->getCode() . "<br> Hata mesajı: " . $e->getMessage();
        $conn = null;
    }
?>

Bu kodu her çalıştırdığımızda yeni veritabanı ve tablo oluşmayacak tabiki. Sadece ilk çalıştırmada veritabanı ve tablo yoksa oluşacak daha sonra var olduğu için kodumuz çalışacak ama yeni birşey oluşturmayacak.

1 yorum yapılmış

    ali

    Adım adım ilerliyorum. Yine oldukça sade ve temiz bir anlatım. Teşekkürler.

    23.04.2020, 16:01:31

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.