Bu rehberde PHP scriptleri ile bir veritabanını yönetmeye nasıl başlayacağınızı öğreneceksiniz. MySQL veritabanına INSERT için nasıl PHP kullanılacağını göreceksiniz. Başlamadan önce, PHP ve veritabanlarıyla çalışmanın en önemli basamaklarını anlatan diğer rehberimize mutlaka göz atmalısınız – PHP MySQL bağlantısı.
Bu rehbere başlamadan önce aşağıdakilere sahip olmalısınız:
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:
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:
İ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 = thom.v@some.com.
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:
Ve son kısım (22 – 24 satırları) eğer sorgumuz başarısız olduysa farklı bir mesaj gösterir:
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:
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:
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:
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:
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:
Görüldüğü üzere, kodumuzun ilk kısmında sorun yok. Bağlantı başarılı şekilde oluşturuldu ancak SQL query duvara tosladı.
"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')
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', 'thom.v@some.com')' at line 1"
Ne yazıkki script’imizin durmasına yol açan bir syntax hatası bulunuyor. Hata şurada:
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', 'thom.v@some.com')' at line 1"</code>
Karşılaşabileceğiniz diğer muhtemel sorunlar:
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.
- İhtiyacınız olacaklar
- Adım 1 – Tablo oluşturma
- Adım 2 – MySQL veritabanına veri girdisi (INSERT) için PHP kodu yazma
- Adım 3 – Başarılı şekilde çalıştığını onaylama ve yaygın sorunların çözümleri
Bu rehbere başlamadan önce aşağıdakilere sahip olmalısınız:
- Hosting kontrol paneli erişimi
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…).
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:
- <?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', 'thom.v@some.com')";
- if (mysqli_query($conn, $sql)) {
- echo "New record created successfully";
- } else {
- echo "Error: " . $sql . "<br>" . mysqli_error($conn);
- }
- mysqli_close($conn);
- ?>
- satır numarasından başlayalım:
- $sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', 'thom.v@some.com')";
İ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 = thom.v@some.com.
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:
- if (mysqli_query($conn, $sql)) {
- echo "New record created successfully";
- }
Ve son kısım (22 – 24 satırları) eğer sorgumuz başarısız olduysa farklı bir mesaj gösterir:
- 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:
- $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:
- // 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;
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:
- <?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 = "thom.v@some.com";
- // 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
laceholder_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 = "john.smith@email.com";
- $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";
- }
- 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.
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:

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:

Görüldüğü üzere, kodumuzun ilk kısmında sorun yok. Bağlantı başarılı şekilde oluşturuldu ancak SQL query duvara tosladı.
"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')
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', 'thom.v@some.com')' at line 1"
Ne yazıkki script’imizin durmasına yol açan bir syntax hatası bulunuyor. Hata şurada:
- $sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";
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', 'thom.v@some.com')' 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.
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.