PHP’nin 5. Sürümünden itibaren artık yavaş yavaş MySQL eklentisine olan destek sonlandırılıyor. Klasik MySQL yerine adında da anlaşılacağı üzere MySQL Improved (MySQLi) yani “MySQL Gelişmiş” eklentisine ağırlık verilmeye başlandı. Yine MySQLi ile birlikte güvenliğe daha fazla ağırlık vermemizi sağlayan Prepared Statements (Hazır Deyimler) yöntemi MySQLi ile en çok kullanılan ve önerilen kullanım şeklidir. Bu yüzden bu yazımızda Hazır Deyimler üzerinden anlatım yapacağız.

1. MySQLi ile Veritabanına Bağlanma (Connect)

MySQLi ile veritabanına bağlanmak için izleyebileceğimiz iki yöntem mevcut. Ancak bunların içinden en doğru ve sağlıklı olanı Nesne Yönelimli olanıdır. Zaten diğer yöntemin klasik MySQL yapısından bir farkı yok ve Hazır Deyimler ile uyumlu çalışmayacaktır.

a. Nesne Yönelimli Kullanım (önerilen):

$mysqli = new mysqli($host, $kullanici, $parola, $veritabani);

b. Yordamsal Kullanım:

$mysqli = mysqli_connect($host, $kullanici, $parola, $veritabani);

2. MySQLi ile Veri Çekme (Select)

a. Tekli Veri Çekme:

Yine yukarıdaki örnekte gördüğümüz gibi MySQLi ile veri eklerken de iki seçeneğimiz var. Birisi klasik MySQL yöntemi diğeri ise MySQLi ile gelen ek güvenlik önlemi almamızı sağlayan bir yöntem olan Prepared Statements (Hazır Deyimler). Klasik yönteme MySQL ile aşina olduğunuzu düşündüğüm için o yönteme değinmeyeceğim.

   $id = "1";

   $query = "SELECT id, baslik, icerik FROM yazilar WHERE id=?";

   $statement = $mysqli->prepare($query);

   $statement->bind_param("i", $id);

   $statement->execute();

   $statement->bind_result($id, $baslik, $icerik);

   $statement->fetch();

   echo ' ID: '. $id .' Başlık: '. $baslik .' İçerik: '. $icerik;

   $statement->close();

Yukarıda görüldüğü gibi ilk önce SELECT ile hangi bilgilerin çekileceğini, FROM ile bu verilerin hangi tablodan çekileceğini ve WHERE ile de hangi veriyi çağırmak istediğimizi belirttik. Ardından $mysqli ile $query değişkenlerimizi prepare() fonksiyonuyla birbirine bağladık. Daha sonra da bind_param() ile WHERE kısmında belirttiğimiz “id” değerinin hangi değişkenden ($id) geleceğini belirttik. Ancak burada dikkat edilmesi gereken nokta “i” yazılı alan. Bu alan $id değişkenlerinin ne tipte bir içerik olduğunu belirtmekte. Örneğin biz “i” olarak belirtmemize rağmen $id için formdan gelen “s” (yazı) tipinde olsaydı bir hata dönecek ve verimiz çağrılmayacaktı. Daha sonra bind_result ile SELECT kısmında çekmek istediğimizi belirttiğimiz değerleri değişkenlere atadık. Burada dikkat etmemiz gereken nokta SELECT kısmında yazdığımız tüm değerlerin hepsini bind_result alanına aynı sayıda yazmak, eğer bir değişkeni eksik yazarsak sorgumuz hatalı çalışacaktır. Son olarak eğer veritabanı ile işiniz bittiyse “close” ile veritabanı bağlantısını sonlandırabilirsiniz.

Açılımlar: s = string (yazı), i = integer (sayı), d = double (ondalık sayılar),  b = blob (ikili veri)

b. Çoklu Veri Çekme:


   $kategori = "1";

   $query = "SELECT id, baslik, icerik, kategori FROM yazilar WHERE kategori=?";

   $statement = $mysqli->prepare($query);

   $statement->bind_param('i', $kategori);

   $statement->execute();

   $statement->bind_result($id, $baslik, $icerik, $kategori);

   while($statement->fetch()) {

                echo ' ID: '. $id;

                echo ' Başlık: '. $baslik;

                echo ' İçerik: '. $icerik;

                echo '<br />';

   }

Bir tablodan birden çok veri çekmek istediğimizde ise yukarıda gördüğümüz işlemin aynısını fetch sorgusunu while döngüsünün içerisine alarak gerçekleştiriyoruz. Burada da dikkat etmemiz gereken nokta WHERE kısmında kategori değerine ait verileri çekmek istediğimizi belirtmemize karşın eğer kategorimizi de ekrana yazdırmak istiyorsak hem SELECT hem de bind_result kısmında bunu belirtmemiz gerekli.

3. MySQLi ile Veri Ekleme (Insert)


   $baslik = 'Başlığımız';

   $icerik = 'İçeriğimiz';

   $query = "INSERT INTO yazilar (baslik, icerik) VALUES(?, ?)";

   $statement = $mysqli->prepare($query);

   $statement->bind_param('ss', $baslik, $icerik);

   $statement->execute();

   $statement->close();

İlk önce INSERT ile hangi tabloya hangi bilgilerin ekleneceğini belirttik. Ardından $mysqli ile $query değişkenlerimizi prepare() fonksiyonuyla birbirine bağladık. Daha sonra da bind_param ile INSERT’te belirttiğimiz içeriklerin hangi değişkenlerden geleceklerini ($baslik ve $icerik) belirttik. bind_param ile “ss” girerek $baslik ve $ içerik değişkenlerinin ne tipte içerikler içerdiğini belirttik. Son olarak eğer veritabanı ile işiniz bittiyse “close” ile veritabanı bağlantısını sonlandırabilirsiniz.

4. MySQLi ile Veri Güncelleme (Update)


   $id = 1;

   $baslik = 'Yeni Başlığımız';

   $icerik = 'Yeni İçeriğimiz';

   $query = "UPDATE yazilar SET baslik=?, icerik=? WHERE id=?";

   $statement = $mysqli->prepare($query);

   $statement->bind_param('ssi', $baslik, $icerik, $id);

   $statement->execute();

   $statement->close();

Veri ekleme işlemindeki gibi baslik ve içerik değerlerinin güncelleneceğini ve hangi içeriğin güncelleneceğini belirttik. Burada dikkat edilmesi gereken nokta bind_param içerisine $baslik ve $icerik alanlarının yanı sıra hangi verinin güncelleneceğini belirten $id değişkeninin de yazılması gerekli. bind_param içerisinde $id değişkenin bir “i” (sayı) olduğu belirterek ek bir güvenlik önlemi sağladık.

Categories: Uncategorized

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *