PHP PDO Veri Ekleme

Php ile Pdo Nesnesi kullanarak veri ekleme yapacağız. PDO ile veri ekleme işlemi exec ve prepare methodu ile yapılabilir.

Tablodaki satırları değiştiren ancak satır ve sütunlarla sonuç kümesi döndürmeyen sorgular (INSERT, UPDATE ve DELETE), exec() methodu ile gönderilir, bu Method, etkilenen satırların sayısını veya hata durumunda "0" değerini döndürür.

PDO::exec() methodu çalıştırılan SQL deyimiyle silinen veya değiştirilen satırların sayısını döndürür. Etkilenen satır yoksa PDO::exec() 0 (sıfır) döndürür.

Formun Hazırlanması


Verilerin düzgün ve eksizsiz olarak girilmesi için HTML5 input Özelliklerinden faydalanacağız.


<form action="" method="post">
    Adınız:<br>
    <input type="text" name="adi" required="required" /><br>
    Soyadınız:<br>
    <input type="text" name="soyadi" required="required" /><br/>
    E-posta Adresiniz:<br/>
    <input type="email" name="eposta" required="required" />
    <input type="submit" value="Kaydet" />
</form>

Gerekli kontrol ve PHP ile Verilerin güvenlik filitreleri yapıldıktan sonra PHP PDO Veri Bağlantısı ve PHP PDO Kullanımı yazılarındaki bilgilerden faydalanarak veritabanı bağlantısı yapıp Veri ekleme işlemi yapacağız.

Verilerin Veritabanına Kaydedilmesi


Veritabanımızda adi, soyadi sütunları olsun.


<?php
try {
  $dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
  $user = "root";
  $passwd = "";

  $db = new PDO($dsn, $user, $passwd);
  //SQL gibi hatalarıda almak için aşağıdaki kod yazılır.
  $db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_WARNING);

  $ekle = $db->exec("INSERT INTO test ( adi, soyadi)
  VALUES ( '$ad', '$soyad')");

          
  } catch ( PDOException $e ){
     echo "Bir Hata Oluştu: ".$e->getMessage();
 }
?>

SQL Injection


SQL Injection, veritabanına dayalı uygulamalara saldırmak için kullanılan bir atak tekniğidir. Ayrıca MySQL katı modda çalıştığından metinlerde yer alan tırnak ifadelerinden dolayı hata verecektir. Daha önce bu özel karakterlerden kaçmak için mysql_real_escape_string() kodu kullanıyorduk PDO ile PDO::quote methodu gelmiştir. Veriler Dışardan alıyorsak Aşağıdaki kodları kullanarak veri güvenliği sağlanmalı.

PDO::quote Methodu, mesajı tırnaklar içine otomatik sarar SQL ifadelerde tırnak içinde belirtmeyin.


$ders="PHP";

$ad = $db->quote($ders);

echo $ad; //ÇIKTI: 'PHP'

PDO::quote methodu kullanırken SQL ifadede values(Değerler) misal VALUES ('$ad', '$soyad', '$email') içindeki değişkenler tırnak içine alınmayacaktır çünkü methodun kendi otomatik oluşturur.


<?php

$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$ad = $db->quote($_POST["ad"]);

$soyad = $db->quote($_POST["soyad"]);

$email = $db->quote($_POST["email"]);

$ekle = $db->exec("INSERT INTO test (ad, soyad, email)
VALUES ($ad, $soyad, $email)");

?>

Son otomatik olarak eklenen "id" (AUTO_INCREMENT PRIMARY KEY sütunu) almak için lastInsertId() yöntemini kullanın. SQL INSERT deyimi için kullanılır.


echo $db-> lastInsertId ();

Verilerin kaydedildiğini öğrenmek için:


echo $ekle; // 1 ve 0 değeri yani TRUE ve FALSE

Bu kodu if ifadesi ile kullanırsa yapılıp, yapılmayacakları belirtebiliriz.


<?php

if($ekle){

echo "Veriler eklendi."	

}else{

echo "Veriler eklenmedi"	
}

?>

Hazırlanmış İfadeler


Hazırlanmış ifadelerden dışarıdan veri almada SQL Injection Korunmak için PDO::quote Methodu ile uğraşmayacaız, prepare(sql) methodu ile verileri Güvenli yükleriz.

Hazırlanmış ifadeleri yani prepare() Methodunu kullanmak, SQL enjeksiyonlarına karşı korumayı artırır.

try {
  $dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
  $user = "root";
  $passwd = "";

 $db = new PDO($dsn, $user, $passwd);
 $db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_WARNING);

 $query = $db->prepare("INSERT INTO test SET adi=?, soyadi=?");
 $insert = $query->execute(array($ad,$soyad));
          
  } catch ( PDOException $e ){
     echo "Bir Hata Oluştu: ".$e->getMessage();
 }

Ali Palakılıç 06/07/2021

Yukarıda tablo adı yok..onu nasıl halledeceğiz..

yönetici 07/07/2021

Ali tablo isminide test verdim veritabanından farklı isimde verebilirsin.

$ekle = $db->exec("INSERT INTO test (ad, soyad, email)
VALUES ($ad, $soyad, $email)");

yakup bakış 12/01/2022

Hocam bişeyler diyonda sanırım zaten bu yazdıklarını bilenler anlıyor. Gözünü seveyim bir bütün halinde yazsan eğer çok istiyorsan şu satırda şununun için desen. parça parça hepsi. kim kimin peşine neyin içine yazıcaz. dosyayı nereden hangi isimle çağıracağız.

yönetici 13/01/2022

Geniş bilgi için PDO Kulanımına bakın. Daha anlamasan youtube videolarına bak yazıyı sonra oku.
Lütfen konu haricinde soru sormayın cevaplanmayacaktır. Yorumunuz onaylandıktan sonra yayınlanacaktır. Lütfen Yukarıda ki mesajları okuyun tekrar aynı soruları sormayın.

1749

KATEGORİ
  • HTML
  • CSS
  • PHP
  • JQUERY
  • PHOTOSHOP
  • JavaScript
  • Web Dünyası
  • Linux
  • MİTHRİL FRAMEWORK
  • Laravel
  • Git
  • React
POPÜLER MAKALE
  • HTML LİNK(Bağlantı)EKLEME - LİNK VERME
  • HTML YAZI VE RESİM ORTALAMA
  • HTML RESME LİNK VERME
  • HTML FORM OLUŞTURMA
  • CSS YATAY MENÜ YAPIMI
  • HTML RESİM EKLEME
  • CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
  • HTML DİV ve SPAN NEDİR?
  • HTML ARKAPLANA MÜZİK EKLEME
  • KALİTE KAYBETMEDEN RESİMLERİ BÜYÜTME
ETİKET
WEBCEBİR © 2013 Tüm hakları saklıdır.