Konuyu Oyla:
  • Toplam: 1 Oy - Ortalama: 5
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: PHP Kullanarak MySQL Veritabanına Veri Ekleme
KingSkrupellos
*
avatar
Hacktivist
Durum: Çevrimdışı
Seviye Puanı: 56
Yaşam Puanı: 1,384 / 1,384
Deneyim: 38 / 100
Rep Sayısı: 2838
Mesaj Sayısı: 6482
Üyelik Tarihi: 21.08.2013
     
Yorum: #1
PHP Kullanarak MySQL Veritabanına Veri Ekleme
07.03.2019 02:33
PHP Kullanarak MySQL Veritabanına Veri Ekleme

Videolu Anlatımlar =>

















İçerikler =>

İhtiyacınız olacaklar
Adım 1 – Tablo oluşturma
Adım 2 – MySQL veritabanına veri girdisi (INSERT) için PHP kodu yazma
Seçenek 1 – MySQLi Yöntemi
Seçenek 2 – PHP Data Object (PDO) Yöntemi
Adım 3 – Başarılı şekilde çalıştığını onaylama ve yaygın sorunların çözümleri
Yaygın sorunların çözümleri
Sonuç

htiyacınız olacaklar
Bu rehbere başlamadan önce aşağıdakilere sahip olmalısınız:

Hosting kontrol paneli erişimi
Adım 1 – Tablo oluşturma
Herşeyden önce, veriniz için tablo oluşturmamız gerekiyor. Bu kolay prosedürü hosting kontrol panelinizde bulunan phpMyAdmin aracılığıyla kolayca uygulayabilirsiniz. Önceki rehberimizde MySQL veritabanı nasıl oluşturulduğunu işlemiştik, dolayısıyla bu kısmı atlıyoruz.



phpMyAdmin sayfasına girdikten sonra aşağıdakine benzer birşey görünüyor olmalıdır:



u266072517 veritabanımız için Students yani Öğrenciler adında bir tablo oluşturacağız. Create Table butonuna tıklayarak yeni bir tablo oluşturabilirsiniz. Ardından tablonuz için gerekli tüm bilgileri girebileceğiniz aşağıdakine benzer bir sayfa göreceksiniz:



Bu, bir tablo için kullanabileceğiniz en sade kurulumdur. Tablo/veritabanı yapısı ve sütunlar için hangi tür ayarları kullanabileceğinizi öğrenmek için phpMyAdmin resmi belgesine gözatabilirsiniz.

Şimdilik, bizim kullandığımız sütunlar için bazı temel bilgiler aşağıdadır:

Name – Sütununuzun adı. Tablonuzun en üstünde gösterilir.
Type – Burada bir sütun türü seçebilirsiniz. Örneğin biz varchar seçtik çünkü string türünde bir isim girmemiz gerekiyor (sadece harflerden oluşur, sayı bulunmaz).
Length/Values – Sütunun sahip olabileceği girdinin maksimum uzunluğunu belirtmek için kullanılır.
Index – Biz, “ID” alanımız için “Primary” index’i kullandık. Bir tablo oluştururken tek bir ID sütunu olması tavsiye edilir. Tablo girdilerini numaralı şekilde sıralamak ve tablo ilişkilerini ayarlamak için kullanılır. Aynı zamanda “A_I” şeklinde işaretledim, bunun anlamı Auto Increment yani Otomatik Artış. Bu sayede girdiler otomatik olarak sıralanacaktır (1,2,3,4…).
Save’e tıklayın ve tablonuz oluşturulsun.

Adım 2 – MySQL veritabanına veri girdisi (INSERT) için PHP kodu yazma
Seçenek 1 – MySQLi Yöntemi
Herşeyden önce, önceki rehberimizde gösterildiği üzere veritabanı ile bir bağlantı oluşturmalısınız. Tamamlandıktan sonra INSERT SQL sorgusu kullanarak devam edeceğiz. Basit bağlantı ve girdi yöntemleriyle örnek kod aşağıdadır:

Kod:
<?php
$servername = "mysql.hostinger.co.uk";
$database = "u266072517_name";
$username = "u266072517_user";
$password = "buystuffpwd";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully";

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', '[email protected]')";
if (mysqli_query($conn, $sql)) {
      echo "New record created successfully";
} else {
      echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>

Kodun ilk bölümü (3 – 18 satırları) veritabanı ile bağlantının kendisi içindir. Bu adımın üzerinden tekrar geçmeyeceğiz, eğer kodun her bir satırının ne anlama geldiğini öğrenmek istiyorsanız, önceden yayınlanmış olan veritabanı bağlantısı rehberimize gözatabilirsiniz.

satır numarasından başlayalım:

Kod:
$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', '[email protected]')";

Bu kodumuzun en önemli satırıdır ve rehberde öğrenmek istediğimiz şey olan verinin MySQL veritabanına girmesini sağlar. INSERT INTO veriyi belirtilen veritabanı tablosuna ekleme komutu yani bir statement’dır. Örneğimizde, veriyi Students tablosuna ekliyoruz.

İlerlerken, açılı parentezler arasında değerleri eklemek istediğimiz tablo sütunlarımız bulunuyor: (name, lastname, email). Veri belirlediğimiz sıra ile eklenecektir. Eğer (email, lastname, name), yazarsak değerler farklı bir sırada eklenir.

Sıradaki adım VALUES komutu. Burada daha önce belirlediğimiz sütunlara değerlerimizi belirtiyoruz. Bu sayede, her bir sütun belirli bir değeri temsil ediyor. Örneğin, bizim durumumuzda şu şekilde olacaktır: isim = Thom, soyisim = Vial, eposta = [email protected]

Bahsetmeye değer bir diğer şey ise, az önce PHP kodu kullanarak SQL query gerçekleştirdik. SQL sorguları tırnak işaretlerinin arasında belirtilmelidir. Örneğimizde, tırnak işaretleri arasındaki ve $sql = sonrasındaki herşey SQL query’dir.

Kodun sonraki kısmı (20 – 22 satırları) sorgumuzun başarılı olup olmadığını kontrol eder:

Kod:
if (mysqli_query($conn, $sql)) {
     echo "New record created successfully";
}

Eğer sorgu başarılı şekilde çalıştıysa basit bir onay mesajı gösterilir.

Ve son kısım (22 – 24 satırları) eğer sorgumuz başarısız olduysa farklı bir mesaj gösterir:

Kod:
else {
     echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

Seçenek 2 – PHP Data Object (PDO) Yöntemi
Önceki örnekte olduğu gibi, yeni bir PDO object oluşturarak veritabanıyla bir bağlantı sağlamalıyız, bu rehberimizden nasıl yapılacağını öğrenebilirsiniz. MySQL veritabanı bağlantısı bir PDO object olduğundan, query hazırlamak ve çalıştırmak için çeşitli PDO ‘metotları’ (herhangi bir objenin parçası olan herhangi bir fonksiyon) kullanmalısınız. Object metodları aşağıdaki gibi çağrılır:

Kod:
$the_Object->the_Method();


PDO, SQL kodunu çalıştırılmadan önce ‘hazırlamanızı’ sağlar. SQL sorgusu değerlendirilir ve çalıştırılmadan önce ‘doğrulanır’. Basit bir SQL injection saldırısı, bir form üzerindeki alana sadece SQL kodu girilerek yapılabilir. Örneğin:

Kod:
// User writes this in the username field of a login form
john"; DROP DATABASE user_table;
// The final query becomes this
"SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;

Sözdizimsel olarak doğru bir SQL kodu olduğundan noktalı virgün DROP DATABASE user_table‘ı yeni bir SQL query haline getirir ve kullanıcı tablonuz oluşturulur. Hazırlanan komutlar “ ve ; karakterlerine izin vermeyerek orjinal sorguyu sonlandırır ve zararlı talimat olan DROP DATABASE asla çalıştırılmaz.

PDO ile veritabanından bilgi alırken veya gönderirken her zaman hazırlanmış komutlar kullanmalısınız.

Hazırlanmış komutları kullanmak için veritabanı object metodu olan prepare() için yeni bir değişken yazmalısınız.

Doğru kod şu şekilde olacaktır:

Kod:
<?php
$servername = "mysql.hostinger.com";
$database = "u266072517_name";
$username = "u266072517_user";
$password = "buystuffpwd";
$sql = "mysql:host=$servername;dbname=$database;";
$dsn_Options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
// Create a new connection to the MySQL database using PDO, $my_Db_Connection is an object
try {
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}
// Set the variables for the person we want to add to the database
$first_Name = "Thom";
$last_Name = "Vial";
$email = "[email protected]";
// Here we create a variable that calls the prepare() method of the database object
// The SQL query you want to run is entered as the parameter, and placeholders are written like this :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)");
// Now we tell the script which variable each placeholder actually refers to using the bindParam() method
// First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to
$my_Insert_Statement->bindParam(:first_name, $first_Name);
$my_Insert_Statement->bindParam(:last_name, $last_Name);
$my_Insert_Statement->bindParam(:email, $email);
// Execute the query using the data we just defined
// The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}
// At this point you can change the data of the variables and execute again to add more data to the database
$first_Name = "John";
$last_Name = "Smith";
$email = "[email protected]";
$my_Insert_Statement->execute();
// Execute again now that the variables have changed
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

Satır 28, 29 ve 30’da bindParam() veritabanı object metodunu kullandık. Aynı zamanda çok daha farklı olan bindValue() metodu da bulunuyor.

bindParam() – Bu metod execute() metoduna ulaşıldığında veriyi değerlendirir. Bu script execute() metoduna ilk ulaştığında $first_Name “Thom” karşılığına geldiğini görür ve bu değeri bağlayarak sorguyu çalıştırır. Script bir sonraki execute() metoduna ulaştığında, $first_Name artık “John’a” karşılık geldiğini görür ve sorguyu yeni değerlerle tekrar çalıştırır. Unutmamak gereken şey query’i sadece bir kez tanımladık ve script’in farklı noktalarında, farklı verilerle tekrar kullandık.
bindValue() – Bu metod veriyi bindValue()’a ulaşıldığı gibi değerlendirir. $bindValue()‘a ulaşıldığında $first_Name değeri “Thom” olduğundan, $my_Insert_Statement için ne zaman bir execute() metodu çağrılırsa, bu kullanılacaktır.
$first_Name değerini tekrar kullanarak ikinci defa yeni bir değer verdiğimizi farkettiniz mi? Eğer veritabanınız bu script’i çalıştırdıktan sonra kontrol ederseniz, $first_Name değişkeni script’in sonunda “John’a” karşılık gelmesine rağmen iki ismide görebilirsiniz. Unutmayın, PHP tüm script’i çalıştırmadan önce değerlendirir.

Eğer bindParam‘ı bindValue ile değiştirmek için script’i güncellerseniz, MySQL veritabanına “Thom Vial” iki kez girmiş olursunuz ve John Smith görmezden gelinir.

Adım 3 – Başarılı şekilde çalıştığını onaylama ve yaygın sorunların çözümleri
Eğer çalıştırarak MySQL veritabanına girdiğimiz query başarılı olmuşsa, aşağıdaki şekilde görüntülenir:

mysql girdisi başarılı

Yaygın sorunların çözümleri
MySQLi
Diğer her durumda bir hata mesajı gösterilecektir. Örneğin, kodumuzda bir syntax hatası oluşturursak şöyle bir görüntü oluşur:

hata mesajı

Görüldüğü üzere, kodumuzun ilk kısmında sorun yok. Bağlantı başarılı şekilde oluşturuldu ancak SQL query duvara tosladı.

Kod:
"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', '[email protected]')

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', '[email protected]')' at line 1"
Ne yazıkki script’imizin durmasına yol açan bir syntax hatası bulunuyor. Hata şurada:

[code]$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', '[email protected]')";

Gördüğünüz gibi normal parantez yerine açılı parantez kullandık. Bu doğru değil ve script’imizin syntax hatası vermesine sebep oldu.

PDO

PDO bağlantısının 7. satırında, hata modu ‘display all exceptions’ yani ‘tüm istisnaları göster’ şeklinde ayarlanmış. Eğer bu script’in dışında bırakılsaydı ve query hata verseydi, herhangi bir hata mesajı almayacaktınız. İstisnalara izin verildiğinden dolayı problemin spesifik olarak nerede olduğu gösteriliyor. Bu genellikle, veritabanına ve tablo isimlerine maruz kalacağından sadece bir script geliştirirken kullanılmalı. Normal şartlarda verinize zararlı yollardan erişmeye çalışan kişilere karşı gizlemelisiniz. Yukarıdaki durumumda normal parantez yerine açılı parantez kullanıldığından hata aşağıdaki benzer olacaktır:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; <code>check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', '[email protected]')' at line 1"</code>
Karşılaşabileceğiniz diğer muhtemel sorunlar:

Hatalı belirtilen sütunlar (varolmayan sütunlar veya yazım hataları).
Değer türlerinden birisinin başka bir sütun türüne yönlendirilmesi. Örneğin, Name sütununa 47 rakamı vermeyi deneseydik bir hata ile karşılaşırdık çünkü bu sütun sadece string değeri alabilir. Ancak tırnak işaretleri içinde bir rakam verseydik, örneğin “47” bu sorun olmazdı çünkü rakamımız sütuna string olarak atanırdı.
Varolmayan bir tabloya veri girmeye çalışmak veya tablo adında yazım hatası yapmak.
Bu hataların tamamı hata mesajı kılavuzunu takip ederek veya error_log dosyasını kontrol ederek giderilebilir.

Başarılı bir veri girişinden sonra, veritabanımızda görebiliyor olmalıyız. phpMyAdmin‘den görüntülediğimizde verimizi eklemiş olduğumuz tabloya bir örnek aşağıdaki gibidir:



Sonuç =>

Bu rehberde, MySQL veritabanına MySQLi ve PDO aracılığıyla veri girmek (INSERT) için nasıl PHP kullanabileceğimizi öğrendik. Aynı zamanda yaygın bağlantı hatalarını nasıl giderebileceğinizi de öğrendiniz. MySQL veritabanına PHP kullanarak nasıl veri girebileceğinizi bilmek, kod öğrenmeye yeni başlayan biriyseniz veya internet sitesi oluşturuyorsanız oldukça faydalıdır.

İşlem Bu Kadar. Hadi Hayırlı Kullanımlar Smile
(Bu konu en son: 07.03.2019 Tarihinde, Saat: 02:33 düzenlenmiştir. Düzenleyen: KingSkrupellos.)

# Cyberizm Digital Security Technological Turkish Moslem Army #
# İnsanda bir organ vardır. Eğer o sağlıklı ise bütün vücut sağlıklı olur;
eğer o bozulursa bütün vücut bozulur. Dikkat edin! O, kalptir.
[ Hz.Muhammed S.A.V ] #


Alinti
Rep Verenler: The_ZiziL , #Ayar , MECZUP
The_ZiziL
*
avatar
Valhalla
Durum: Çevrimdışı
Seviye Puanı: 36
Yaşam Puanı: 899 / 899
Deneyim: 97 / 100
Rep Sayısı: 578
Mesaj Sayısı: 2000
Üyelik Tarihi: 06.02.2017
     
Yorum: #2
RE: PHP Kullanarak MySQL Veritabanına Veri Ekleme
07.03.2019 09:19
Teşekkürler, Emeğine Sağlık King.

Allah’tan utanmayan insanlardan da utanmaz…
Alinti
Rep Verenler: KingSkrupellos
#Ayar
*
avatar
Tabutçu
Durum: Çevrimdışı
Seviye Puanı: 36
Yaşam Puanı: 779 / 875
Deneyim: 3 / 100
Rep Sayısı: 1550
Mesaj Sayısı: 1872
Üyelik Tarihi: 13.08.2013
      
Yorum: #3
RE: PHP Kullanarak MySQL Veritabanına Veri Ekleme
07.03.2019 20:35
Teşekkürler, Emeğine Sağlık

Başka forumlarda üyeliğim bulunmamaktadır.
ayar
Alinti
Rep Verenler: KingSkrupellos
MECZUP
*
avatar
Binbaşı
Durum: Çevrimdışı
Seviye Puanı: 15
Yaşam Puanı: 361 / 361
Deneyim: 45 / 100
Rep Sayısı: 36
Mesaj Sayısı: 273
Üyelik Tarihi: 17.10.2018
      
Yorum: #4
RE: PHP Kullanarak MySQL Veritabanına Veri Ekleme
07.03.2019 22:15
Teşekkürler, Emeğine Sağlık reis

Meczup Official

VarsaYoksa Cyberizm
Alinti
Rep Verenler: KingSkrupellos
paydana
*
avatar
Teğmen
Durum: Çevrimdışı
Seviye Puanı: 1
Yaşam Puanı: 1 / 11
Deneyim: 47 / 100
Rep Sayısı: 0
Mesaj Sayısı: 6
Üyelik Tarihi: 23.03.2019
     
Yorum: #5
RE: PHP Kullanarak MySQL Veritabanına Veri Ekleme
24.03.2019 03:24
Teşekkürler, Emeğine Sağlık Smile
Alinti



1 Ziyaretçi