Menü
ücretsiz
Kayıt
Ev  /  Multimedya/ Bir MySQL veritabanına satır eklemek için PHP nasıl kullanılır? MySQL'e veri yazma - kodun şarkısını seslendirmek için Php veri tabanına veri giriyor

Bir MySQL veritabanına satır eklemek için PHP nasıl kullanılır? MySQL'e veri yazma - kodun şarkısını seslendirmek için Php veri tabanına veri giriyor

Bu eğitimde, doğrudan PHP betiklerinizden veri tabanına nasıl veri ekleyeceğinizi inceleyeceğiz.

SQL kullanarak veri ekleme

Bir veritabanına veri eklemek için SQL'i, bir veritabanı ve tablolar oluşturmak için SQL'i kullandığınız gibi kullanırsınız. SQL sorgu sözdizimi şöyledir:

TabloAdı İÇİNE EKLE (sütun1, sütun 2, ...) DEĞERLER(değer1, değer 2, ...)

Gördüğünüz gibi, tek bir SQL deyiminde birden çok sütunu virgülle ayrılmış bir listede belirterek güncelleyebilirsiniz. Ancak elbette yalnızca bir sütun ve bir değer de belirtebilirsiniz. Verilen SQL deyiminde belirtilmeyen sütunlar boş kalacaktır.

Örnek: Bir tabloya yeni bir kişi eklemek

Bu örnekte Ders 18'deki veritabanını kullanıyoruz. Diyelim ki veritabanına bir kişi eklemek istiyoruz. Olabilir Gus Kaz telefon numarası ile 99887766 ve doğum tarihi 1964-04-20 .

SQL deyimişöyle görünebilir:

$strSQL = "Kişilere GİRİN(Ad,Soyad,Telefon,DoğumTarihi) DEĞERLER("Gus","Kaz","99887766 ","1964-04-20")";

Gördüğünüz gibi, SQL ifadeleri oldukça uzun olabilir ve izini kaybetmek kolaydır. Bu nedenle, SQL deyimini biraz farklı yazmak daha iyidir:

strSQL = "INSERT INTO people("; strSQL = strSQL . "İlk adı"; strSQL = strSQL . "Soy isim" strSQL = strSQL . "telefon"; strSQL = strSQL . "doğum)"; strSQL = strSQL . "DEĞERLER("; strSQL = strSQL . ""Gus", "; strSQL = strSQL . ""Kaz", "; strSQL = strSQL . ""99887766", "; strSQL = strSQL . ""1964/04/20""; mysql_query($strSQL) veya die(mysql_error());

Burada SQL ifadesi, cümleyi küçük parçalara bölerek ve ardından bunları bir değişkende birleştirerek oluşturulur. $strSQL.

Uygulamada, birinin veya diğerinin uygulanmasında bir fark yoktur, ancak büyük tablolarla çalışırken "takip etme" yeteneği son derece önemli hale gelir, bu nedenle en uygun yöntemi seçin.

Gus Goose'u veritabanına eklemek için aşağıdaki kodu çalıştırmayı deneyelim:

Veritabanına veri ekleme // Veritabanı sunucusuna bağlan mysql_connect("mysql.myhost.com", "kullanıcı", "susam") or die(mysql_error());// veritabanı seç mysql_select_db("veri tabanım") or die(mysql_error()); // SQL deyimi oluşturuluyor $strSQL = "KİŞİLERE EKLEYİN("; $strSQL = $strSQL . "İlk adı"; $strSQL = $strSQL . "Soy isim"; $strSQL = $strSQL . "telefon"; $strSQL = $strSQL . "Doğum günü)"; $strSQL = $strSQL . "DEĞERLER("; $strSQL = $strSQL . "Gus", "; $strSQL = $strSQL . ""Kaz", "; $strSQL = $strSQL . ""99887766", "; $strSQL = $strSQL . ""1964/04/20""; // SQL deyimi çalıştırılır mysql_query($strSQL) veya die(mysql_error()); // Bağlantıyı kapatıyoruz mysql_close(); ?>

Veritabanı güncellendi!

Kullanıcı girişi DB'ye kaydediliyor

Bunun için Ders 11'de olduğu gibi bir form oluşturabileceğinizi ve formdaki değerlerin SQL deyimine eklenebileceğini muhtemelen çoktan anladınız. Diyelim ki basit bir formunuz var:

Bu form bir dosyaya gönderilir ekle.php Ders 11'de gösterildiği gibi, form içeriğini isteyerek kullanıcı girdisi alabilirsiniz. Bunda özel durum SQL ifadesi şöyle görünebilir:

strSQL = "INSERT INTO people(Ad) değerleri("" . $_POST["FirstName"] . "")"

Benzer şekilde çerezler, oturumlar, sorgu dizeleri vb. için veri talep edebilirsiniz.

En yaygın başlangıç ​​hataları

İlk başta, veritabanını güncellemeye çalıştığınızda muhtemelen bir sürü hata mesajı alacaksınız. Bir veritabanıyla çalışırken hiçbir hata kesinlikle kabul edilemez değildir. Yanlış yerleştirilmiş bir virgül, veritabanının güncellenmediği ve bir hata mesajı alacağınız anlamına gelebilir. Aşağıda en yaygın hataları açıklıyoruz.

geçersiz veri türü

Sütun verilerinin ve veri türünün eşleşmesi önemlidir. Her sütun belirli bir türde veri içerebilir. Aşağıdaki ekran görüntüsü, örneğimizdeki "kişiler" tablosunun veri türlerini göstermektedir.

Örneğin, bir veri alanına metin veya sayı girmeye çalışırsanız bir hata verilir. Bu nedenle, veri tipini olabildiğince kesin olarak ayarlayın.

En sık kullanılan veri türleri aşağıda listelenmiştir:

Anlam Veri tipi Boyut
CHR
Metin veya metin ve sayıların birleşimi. Hesaplamalarda kullanılmayan numaralar için de kullanılabilir (örn. telefon numaraları). En fazla 255 karakter - her iki uzunluk da "Uzunluk"ta belirtilir
METİN
Büyük metin blokları veya metin ve sayı kombinasyonu. 65.535 karaktere kadar
INT
Matematiksel hesaplamalar için sayısal veriler. 4 bayt
TARİH
YYY-AA-GG formatındaki tarihler 3 bayt
ZAMAN
ss:dd:ss formatında saat 3 bayt
DATETIME
YYY-AA-GG ss:dd:ss formatında tarih ve saat 8 bayt

Tırnak veya ters eğik çizgi içeren SQL ifadeleri

Tek tırnak karakterleri (") içeren metni yapıştırmaya çalışırsanız, ikili alıntı(") veya bir ters eğik çizgi (\), kayıt veritabanına eklenmez. Çözüm, veritabanı sorgularına eklendiğinde anımsatılması gereken karakterlerden önce ters eğik çizgi kullanmaktır.

Bu dersimizde forma kullanıcı tarafından girilen veriler olan MySql veritabanına nasıl girileceğini öğreneceğiz. Web sayfası kodundan MySql veritabanına nasıl bağlanacağınızı, veri tabanına veri işlemeyi ve girmeyi öğreneceksiniz.


Geçen derste Denver'ı bilgisayarınıza nasıl kuracağınızı, kendi veritabanınızı nasıl oluşturacağınızı, bunun için bir kullanıcıyı, veritabanında nasıl tablo oluşturacağınızı anlattım ve tek kayıtla doldurduk.

Bu eğitimde oluşturacağız html belgesi kullanıcı bilgilerini girmek ve php dosyası- verileri işleyecek olan bu bilgilerin işlemcisi, MySql veritabanına bağlanacak ve oraya yeni kayıtlar ekleyecektir.

Sözlerden eylemlere geçerek başlayalım.

Bir web sayfasından MySQL veritabanına kullanıcı verisi ekleme

İlk adım: oluştur html formu veri girişi için

En başından itibaren php, MySql ile çalışmaya ve yazılan kodu test etmeye hazırlanmamız gerekiyor. yerel bilgisayar. Bunun için:

1. Bilgisayarınızda Denwer'ı başlatın.

2. açık sanal disk, Denver tarafından oluşturuldu (örneğin, sürücüm “Z”). Açın, ardından: home - localhost - www - orada oluşturun yeni dosya ve ona bir isim verin ("db1" adını vereceğim).

3. Adobe Dreamweaver'da çalışıyorsanız, site yöneticisine gidin, orada "Yeni" düğmesine tıklayın, yol olarak yeni oluşturulan klasörün yolunu seçin, yukarıdaki alanda siteye bir ad verebilirsiniz, ardından tıklayın Kaydet - Bitti. Tüm bunlardan sonra, klasörünüz Adobe Dreamweaver'ın sağ bölmesinde görünecektir.

1. Şimdi düzenli oluşturacağız html dosyası(info_form.html olarak adlandıralım ve yeni oluşturulan db1 klasörüne kaydedelim) ve oraya bilgi girişi için form kodunu yazalım. new_db database users tablomuzda, bir kullanıcının doldurabileceği 4 alan vardır (id alanı otomatik olarak doldurulacaktır). Buna dayanarak, aşağıdaki kodu oluşturabilirsiniz:

Başlıksız Belge










Burada formumuzun “action” parametresinde dosya kayıtlıdır. form.php. Bir sonraki oluşturacağımız işleyici dosyası olacak.

Ayrıca formumuzu biçimlendirmek için bir style.css dosyası oluşturalım. Zaten koda dahil edilmiştir, bu yüzden geriye kalan tek şey onu oluşturmak, onu html dosyasıyla aynı klasöre yerleştirmek ve içine aşağıdaki kodu yazmak:

Gövde(genişlik:400 piksel; marj:0 otomatik; arka plan:#F8F4B6;) etiket(ekran: blok; kayan nokta: sol; genişlik: 150 piksel; dolgu: 0 10 piksel; kenar boşluğu: 18 piksel 0 0; metin hizalama: sağa;) # gönder(float:sağ; kenar boşluğu:5 piksel 50 piksel 10 piksel 0;)

Şimdi form şöyle görünür:

Ancak, verileri girip formu göndermeye çalışırsanız, scripts dizininde form.php dosyası bulunmadığından bir hata görürsünüz.

Bir işleyici dosyası oluşturmak bir sonraki görevimizdir.

2. Klasörün içine girelim db1 adında bir klasör oluştur Kodlar. İçinde, MySql veritabanıyla etkileşim için tüm betiklerimizi kaydedeceğiz.

Klasör oluşturulduktan sonra, oluştur yeni php dosyasını açın ve komut dosyaları klasörüne şu şekilde kaydedin: form.php.

Ancak doğrudan bilgi işlem dosyasıyla ilgilenmeden önce, önce veritabanımıza bağlanmalıyız. Bunun için yaratmayı öneriyorum ayrı dosya ve bu yüzden:

Büyük olasılıkla projenizde MySQL veritabanına yalnızca bir dosyadan bağlanmanız gerekmeyecek. Kural olarak, veritabanıyla etkileşime geçin çeşitli dosyalar proje.
Bu tür her dosyaya aynı veritabanı bağlantı kodunu yazmak çok pratik değildir. Ve örneğin, bu tür 50 dosya varsa ve iyi bir gün kullanıcının şifresini değiştirirseniz ve bu 50 dosyanın hepsini aramanız ve her birinde düzeltmeler yapmanız gerekir.
MySql veritabanına bağlantı olması gereken dosyaların her birine bağlanacak olan bağlantı için ayrı bir dosya kullanmak çok daha uygundur. Bu durumda, yalnızca bir dosyada düzeltme yapmanız gerekecektir.

Öyleyse yeni bir php dosyası oluşturalım, onu arayalım connect.php ve komut dosyaları için klasöre koyun. İçinde, MySql veritabanımıza bağlanmak için kodun yanı sıra, meydana geldiklerinde hataları bildirecek kodu yazacağız. Lütfen kullanıcı adınızı, şifrenizi ve veritabanı adınızı parametre olarak girmeniz gerekeceğini unutmayın. Ana bilgisayar localhost olmalıdır.

Veritabanına bağlanırken hata oluştu! " .MySQL Hatası() . "

"); mysql_select_db("new_db")//parantez içindeki parametre ("bağlanılacak veritabanının adı") veya die("

Veritabanı seçim hatası! ". MySQL Hatası() . "

"); ?>

Şimdi form.php dosyasına gidelim ve aşağıdaki kodu kullanarak connect.php dosyasını içine dahil edelim:

Formu şimdi göndermeye çalışırsanız, gönderdikten sonra boş bir web sayfası göreceksiniz. Üsse yeni bağlandığımız ve şimdilik başka bir şey göstermediğimiz için bu normal.

Bir hata mesajı görürseniz, tüm parametrelerin (kullanıcı adı, parola, ana bilgisayar adı: localhos, veritabanı adı) doğru olduğunu kontrol edin ve ayrıca Denver'ınızın açık olduğundan emin olun.

3. MySQL veritabanına başarılı bir şekilde bağlandık ve şimdi yapmamız gereken işleyici dosyamızdaki forma girilen verileri kabul edin. Html belgesinde bulunan "ad" öznitelikleri bu konuda bize yardımcı olacaktır.

Veri elde etmek için özel bir php değişkeni, bize web formundaki tüm bilgileri sağlar. Bu değişkene "$_REQUEST" adı verilir.

connect.php dosyasını bağladıktan sonra form.php dosyasına aşağıdaki kodu yazın:

$first_name = $_REQUEST["ad_ad"]; $soyadı = $_REQUEST["soyadı"]; $email = $_REQUEST["email"]; $facebook = $_REQUEST["facebook"];

4. Dosyadaki verileri aldık ve değişkenlere girdik. şimdi ihtiyacın var bu verileri MySQL veritabanı tablomuza gönderin. Bunun için aşağıdaki kodu aşağıdaki gibi yazmanız gerekmektedir.

$insert_sql = "Kullanıcılara EKLE (ad_ad, soyad, e-posta, facebook)" . "VALUES("($ad_ad)", "($soyad)", "($email)", "($facebook)");"; mysql_query($insert_sql);

Burada öncelikle “users” tablosunun uygun alanlarına uygun değişkenleri girmemiz gerektiğini söyleyerek bir sorgu oluşturuyoruz. Bu sorguyu “$insert_sql” değişkenine giriyoruz. Ardından, özel mysql_query işlevini kullanarak bu sorguyu yürütürüz.

Formu şimdi doldurup gönderirseniz ve ardından veritabanınızın "kullanıcılar" tablosuna bakarsanız, gönderimden sonra orada görünen yeni girişi göreceksiniz.

5. Bir web sayfasından yeni bir kaydı MySQL veritabanı tablosuna ekledik. Şimdi verilerimizin eklendiği formata biraz değinmek istiyorum.

Öncelikle, bir formu dolduran bir kişinin bilgi girişinin başında gereksiz boşluklar bırakabileceği duruma dikkat etmeniz gerekir. Kesilmeleri gerekiyor.

İkincisi, Facebook için bir alanımız var. Daha sonra bu bilgileri bir bağlantı olarak görüntülemek istersek, bu alandaki verilerin doğru biçimde (ör. "http://www.facebook.com/facebook id") saklanmasına dikkat etmemiz gerekir. Ancak kullanıcı bu verileri her zaman ihtiyaç duyduğumuz şekilde girmeyecektir. Girebilir: “www.facebook.com/facebook kimliği”, “facebook.com/facebook kimliği” veya sadece “/facebook kimliği”.

Bu durumlardan kaçınılmalıdır. Bunun için kodumuzu düzeltelim. İşlevi kullanarak olası fazladan boşlukları keseceğiz kırpmak ve işlev, facebook için girilen url'nin doğruluğunu kontrol edecektir. preg_match. Böylece, form.php dosyasının tüm kodu şöyle görünecektir:

Başlıksız Belge Veritabanına yeni bir giriş eklendi!

"; ?>

fonksiyon hakkında preg_match:
Bu, normal ifadelerle arama yapmak için bir işlevdir.

Parantez içindeki ilk parametre Düzenli ifade, ikincisi aranacak dizedir.

İşlev yalnızca ilk eşleşmeyi döndürür: eşleşme yoksa 0, eşleşme varsa 1.

Şimdi, alanlardan birini doldurmanın başına gereksiz boşluklar koyarak ve http:// olmadan facebook adresini girerek veya yalnızca facebook kimliğini tamamen girerek formu kasıtlı olarak doldurmayı deneyin. Bir istek gönderin ve ardından veri tabanına gidin ve tam olarak doğru olmayan doldurmaya rağmen verilerin tam olarak ihtiyacımız olan forma sahip olduğunu göreceksiniz.

bununla bitireceğim bu ders. Bu dersin tüm dosyalarını kaynak kodundan indirebilirsiniz (connect.php dosyasındaki parametreleri kendinize göre değiştirmeyi unutmayın).

Ve bir sonraki dersimizde MySQL veri tabanından bilgi çıkarmayı, gerekli kayıtları seçmeyi ve ekranda göstermeyi öğreneceğiz. Bir sonraki dersi kaçırmamak için aşağıda gördüğünüz abonelik formunu kullanarak blog güncellemelerine abone olun.

Yorumlarınızı bırakın ve sosyal medya düğmelerini kullanarak arkadaşlarınızla paylaşın.

İyi şanslar ve bir sonraki derste görüşmek üzere!

Son güncelleme: 1.11.2015

Veri eklemek için "INSERT" ifadesi kullanılır:

$query = "Mal DEĞERLERİNE EKLEYİN(NULL, " Samsung Galaksi III","Samsumg"";

"INSERT" ifadesi tabloya bir satır ekler. Sonrasında anahtar kelime INTO, tablonun adını belirtir ve DEĞERLER'den sonra tüm sütunlar için değer kümesi parantez içinde belirtilir. Tabloda üç sütunumuz olduğu için üç değer belirtiyoruz.

Bir önceki konuda tablo oluştururken şu sütun sırasını belirttiğimiz için: id, name, company, bu durumda id sütunu için NULL ve ad için "Samsung" geçilir. Galaksi III" ve şirket için - "Samsumg".

id sütunu AUTO_INCREMENT olarak tanımlandığı için, onun için belirli bir sayısal değer belirtmek zorunda değiliz ve bir NULL değeri iletebiliriz ve MySQL bir sonraki uygun değeri sütuna atayacaktır.

Şimdi bir örnek kullanarak veri eklemeye bakalım. Bir dosya oluşturalım oluştur.php aşağıdaki içerikle:

Veri eklendi"; ) // bağlantıyı kapat mysqli_close($link); ) ?>

Yeni model ekle

Modeli girin:

Üretici firma:

Burada, veritabanıyla etkileşim kodu, formların işlevselliği ile birleştirilir: formu kullanarak, veritabanına eklenecek verileri giriyoruz.

Güvenlik ve MySQL

Burada mysqli_real_escape_string() işlevini kullandık. Daha sonra bir SQL sorgusunda kullanılan bir dizedeki karakterlerden kaçmaya hizmet eder. Parametre olarak bir bağlantı nesnesi ve kaçılacak bir dize alır.

Bu nedenle, aslında karakter çıkışını iki kez kullanırız: önce mysqli_real_escape_string() işlevini kullanan sql ifadesi için ve ardından html için htmlentities() işlevini kullanan html için. Bu, kendimizi aynı anda iki tür saldırıdan korumamıza izin verecektir: XSS saldırıları ve SQL enjeksiyonları.

Bu kılavuzda, bilgisayarınızdan bir veritabanını yönetmeye nasıl başlayacağınızı öğreneceksiniz. PHP senaryo. öğreneceksiniz MySQL tablosuna kayıt ekleme, kullanarak php kodu. Başlamadan önce, PHP ve veritabanlarıyla çalışmanın temel adımlarını (PHP'den MySQL veritabanına bağlanma) kapsayan diğer eğitimlerimize göz atın.

Başlamadan önce aşağıdakileri kontrol edin:

  • Barındırma kontrol panelinize erişim

Adım 1 - Tablo Oluşturma

Öncelikle verileriniz için bir tablo oluşturmamız gerekiyor. Bu, yapabileceğiniz çok basit bir işlemdir. phpMyAdmin barındırma kontrol panelinizden. Önceki bir öğreticide MySQL veritabanı oluşturma sürecini zaten ele aldık, bu yüzden burada bu noktayı atlayacağız.

PhpMyAdmin sayfasına girdikten sonra benzer bir resim göreceksiniz:

adlı bir tablo oluşturalım. öğrenciler veri tabanımız için u266072517_name. Butona tıklayarak yeni bir tablo oluşturabilirsiniz. Tablo Oluştur. Bundan sonra göreceksin yeni sayfa tablonuz için gerekli tüm verileri girebileceğiniz yer:

Bu tablo oluşturmanın en kolay yoludur, tablo/veritabanı yapısı ve her alan için hangi ayarların kullanılabileceği hakkında daha fazla bilgi için lütfen resmi phpMyAdmin belgelerine bakın.

İşte kullanacağımız alanların birkaç basit açıklaması:

  • İsim alanınızın adıdır. Tablonuzun en üstünde görüntülenecektir.
  • tip– burada alan tipini ayarlayabilirsiniz. Örneğin, biz seçiyoruz varchar, çünkü burada adı olan (sayılardan değil harflerden oluşan) bir dize girmemiz gerekiyor.
  • Uzunluk/Değerler– bu alanda kaydınızın maksimum uzunluğunu ayarlamak için kullanılır.
  • dizin– “ID” alanımız için “Birincil” dizini kullanıyoruz. Bir tablo oluşturulduğunda, bir kimlik alanına sahip olunması önerilir. Tablolar arasında ilişkiler kurulduğunda bir tablodaki kayıtları indekslemek için kullanılır. Buraya da not edilebilir “A_I”, yani Otomatik artış. Bu ayar, indeksi (1,2,3,4…) otomatik olarak artıracaktır.

Tıklamak Kaydetmek ve tablonuz oluşturulacak.

Adım 2 — PHP Kodunu Oluşturma ve MySQL Tablosuna Kayıt Ekleme

Seçenek 1 - MySQLi Yöntemi

Öncelikle bir önceki rehberimize göre veritabanı ile bağlantı kurmanız gerekiyor. Bundan sonra, MySQL tablosuna bir kayıt eklemek için SQL sorgusu ile devam edebiliriz – SOKMAK. İşte bir bağlantı ve bir ekleme yöntemi içeren eksiksiz bir kod örneği:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Böylece, kodun ilk kısmı (satırlar 3 – 18 ) veri tabanına bağlantı kurmanın bir parçasıdır. Bu kısmı tekrar gözden geçirmeyeceğiz, her satırın ne anlama geldiğini öğrenmek istiyorsanız, bir veritabanına nasıl bağlanılacağıyla ilgili önceki eğitimimize bakın.

Çizgi ile başlayalım 19 :

$sql = "INSERT INTO Students (isim, soyad, e-posta) DEĞERLER ("Thom", "Vial", " [e-posta korumalı]")";

Bu, en önemli kod satırıdır, bu eğitimde anlattığımız her şeyi yapar - veritabanına bir MySQL tablo girişi ekler. TAKIN belirtilen MySQL veritabanı tablosuna bir kayıt ekleyen bir ifadedir. Örneğimizde tabloya veri ekliyoruz. öğrenciler.

Parantez içinde ilerleyerek tablonun alanlarını, ekleyeceğimiz değerleri tanımlarız: (ad, soyad, e-posta). Veriler belirli bir sırada eklenecektir. eğer yazarsak (e-posta, soyad, ad), değerler farklı bir sırayla eklenecektir.

Değerin sonraki kısmı DEĞERLER. Burada değerlerimizi daha önce belirtilen alanlara ayarlıyoruz. Böylece her alan kendi değerini alacaktır. Örneğin, bizim durumumuzda şöyle bir şey olurdu: isim=Thom, soyadı=Şişe, e-posta= [e-posta korumalı] .

Burada oluşturduğumuza dikkat etmek önemlidir SQL sorgusu PHP kodunu kullanarak. SQL sorguları tırnak içine alınmalıdır. Örneğimizde, tırnak işaretleri arasındaki ve $sql = sonrasındaki her şey bir SQL sorgusudur.

Kodun sonraki kısmı ( 20 – 22 line) sorgumuzu çalıştırır ve sorgunun başarılı olup olmadığını kontrol eder:

If (mysqli_query($conn, $sql)) ( echo "Yeni kayıt başarıyla oluşturuldu"; )

Sorgu doğru şekilde çalıştırılırsa bir başarı mesajı görüntülenir.

Ve son bölüm 22 – 24 satırları), talebimizin başarısız olması durumunda başka bir mesaj gösterir:

Aksi takdirde ( echo "Hata: " . $sql . "
" .mysqli_error($conn); )

Bu kod, bir şeylerin ters gitmesi durumunda bize bir hata mesajı görüntüler.

Seçenek 2 - PHP Veri Nesnesi Yöntemi (P HP Data O nesnesi)

Önceki örnekte olduğu gibi, önce yeni bir PDO nesnesi oluştururken yapılan bir veritabanı bağlantısı kurmamız gerekiyor - önceki eğitimde bunun nasıl yapılacağı açıklanıyor. MySQL veritabanı bağlantısı bir PDO nesnesi olduğundan, sorguyu hazırlamak ve çalıştırmak için çeşitli PDO "yöntemleri" (belirli bir nesnenin parçası olan işlevler) kullanmalıyız. Nesne yöntemleri şu şekilde adlandırılır:

$the_Object->the_Method();

PDO, çalıştırmadan önce SQL kodunu 'hazırlamanıza' olanak tanır. SQL sorgusu çalıştırılmadan önce değerlendirilir ve ayarlanır. Yani, basit bir saldırı SQL enjeksiyonu form alanına SQL kodu doldurularak yapılabilir. Örneğin:

// Kullanıcı bunu bir oturum açma formunun kullanıcı adı alanına yazar thom"; DROP DATABASE user_table; // Son sorgu şu olur "SELECT * FROM user_table WHERE username = thom";DROP DATABASE user_table;

SQL kodu sözdizimsel olarak doğru olduğundan, noktalı virgül DROP DATABASE user_table yeni SQL sorgusu ve kullanıcı tablonuz bırakılır. Hazırlanan ifadeler karakterlere izin vermiyor Ve ; orijinal talebi ve talimatı tamamlamak için VERİTABANI DÜŞÜR asla idam edilmeyecektir.

Her zaman PDO ile bir veritabanından veri gönderirken veya alırken hazırlanmış sorguları kullanın.

Hazırlanan ifadeleri kullanmak için, yöntemi çağıracak yeni bir değişken oluşturmanız gerekir. hazırlanmak() veritabanı nesnesinde.

Doğru kod şöyle görünür:

$servername = "mysql.hostinger.com"; $veritabanı = "u266072517_adı"; $kullaniciadi = "u266072517_kullanici"; $sifre = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // PDO kullanarak MySQL veritabanına yeni bir bağlantı oluşturun, $my_Db_Connection bir nesne try ( $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Başarılı bir şekilde bağlandı"; ) catch (PDOException $ error) ( echo "Bağlantı hatası: " . $error->getMessage(); ) // Veritabanına eklemek istediğimiz kişi için değişkenleri ayarlayın $first_Name = "Thom"; $last_Name = "Şişe"; $e-posta = " [e-posta korumalı]"; // Burada veritabanı nesnesinin ready() yöntemini çağıran bir değişken oluşturuyoruz // Çalıştırmak istediğiniz SQL sorgusu parametre olarak giriliyor ve yer tutucular şöyle yazılıyor:placeholder_name $my_Insert_Statement = $my_Db_Connection-> ready("INSERT INTO Students (ad, soyad, e-posta) VALUES (:ad_adı, :soyadı, :email)"); // Şimdi bindParam() yöntemini kullanarak betiğe her yer tutucunun gerçekte hangi değişkene atıfta bulunduğunu söylüyoruz // Önce parametresi, yukarıdaki ifadede yer tutucudur - ikinci parametre, $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement->'a başvurması gereken bir değişkendir bindParam(:email, $email); // Az önce tanımladığımız verileri kullanarak sorguyu yürütün //execut() yöntemi başarılı olursa TRUE, başarısız olursa FALSE döndürür, eğer () durumunda kendi mesajlarınızı buraya yazmanıza izin verir $my_Insert_Statement->execute()) ( echo "Yeni kayıt başarıyla oluşturuldu"; ) else ( echo "Kayıt oluşturulamadı"; ) // Bu noktada değişkenlerin verilerini değiştirebilir ve veri tabanına daha fazla veri eklemek için tekrar çalıştırabilirsiniz $first_Name = "John"; $last_Name = "Demirci"; $e-posta = " [e-posta korumalı]"; $my_Insert_Statement->execute(); // Değişkenler değiştiğine göre tekrar çalıştırın if ($my_Insert_Statement->execute()) ( echo "Yeni kayıt başarıyla oluşturuldu"; ) else ( echo "Kayıt oluşturulamadı"; )

28, 29 ve 30. satırlarda yöntemi kullanıyoruz bindParam() veritabanı nesnesi. yöntemi de var bağlamaDeğeri(), öncekinden farklı.

  • bağlamaParam() - bu yöntem, yöntem kullanıldığında verileri sayar. uygulamak() elde edildi. Komut dosyası yönteme ilk ulaştığında uygulamak() bunu görüyor $ad_adı"Thom" anlamına gelir, bu değeri bağlar ve sorguyu yürütür. Komut dosyası yönteme ikinci kez geldiğinde uygulamak()öyle görünüyor $ad_adışimdi "John" a atıfta bulunur, bu değeri bağlar ve sorguyu yeni değerle yeniden çalıştırır. Bir kez istek oluşturduğumuzu ve ardından betiğin farklı yerlerine farklı verileri koyduğumuzu anlamak önemlidir.
  • bağlamaDeğeri() - bu yöntem, kuyruk ona ulaşır ulaşmaz verileri değerlendirir. değerden beri $ad_adı yönteme ulaştığımız anda "Thom" olarak verildi bağlamaDeğeri(), yöntem çağrılırken kullanılacaktır uygulamak()İçin $my_Insert_Statement.

Değişkeni yeniden kullandığımıza dikkat edin. $ad_adı ve ona ikinci kez yeni bir değer verin. Bu betiği çalıştırdıktan sonra veritabanınızı kontrol ederseniz, değişkenin değerine rağmen verilen adların ikisi de orada olacaktır. $ad_adı bu betiğin sonundaki "John" a eşit olacaktır. PHP'nin bir komut dosyasını çalıştırmadan önce içeriğini değerlendirdiğini unutmayın.

Komut dosyanızı değiştirerek değiştirirseniz bindParam Açık bağlamaDeğeri, MySQL veritabanına iki kez "Thom Vial" ekleyeceksiniz ve John Smith yoksayılacak.

3. Adım - Başarıyı kontrol etme ve yaygın sorunları çözme

MySQL veritabanına karşı yürüttüğümüz sorgu başarılı olursa şöyle bir mesaj görürüz:

Yaygın Hataları Çözme

MySQLi

Aksi takdirde, yukarıdaki mesaj yerine bir hata mesajı gösterilecektir. Örneğin, kodumuzda bir söz dizimi hatası yapalım ve şunu elde edelim:

Gördüğümüz gibi kodun ilk kısmı tamam, bağlantı başarıyla kuruldu, ancak SQL sorgumuz yürütülürken başarısız oldu.

"Hata: INSERT INTO Students (isim, soyad, e-posta) DEĞERLER ("Thom", "Vial", " [e-posta korumalı]") SQL sözdiziminizde bir hata var; "(ad, soyad, e-posta) VALUES ("Thom", "Vial", ") yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın. [e-posta korumalı]")" 1. satırda"

Komut dosyamızın başarısız olmasına neden olan bir sözdizimi hatası var. Hata buradaydı:

$sql = "INSERT INTO Students (isim, soyad, e-posta) DEĞERLER ("Thom", "Vial", " [e-posta korumalı]")";

Gördüğünüz gibi yuvarlak ayraçlar yerine kaşlı ayraçlar kullanıyoruz. Bu yanlıştır ve betiğimizde bir sözdizimi hatasına neden olur.

PDO

PDO bağlantısının 7. satırında, hata işleme modu 'tüm istisnaları göster' olarak ayarlanmıştır. Bunu komut dosyasından çıkarırsanız ve istek başarısız olursa herhangi bir hata mesajı almazsınız. İstisnalar etkinleştirildiğinde, karşılaşılan belirli sorunlar görüntülenecektir. Genel olarak, bu en iyi şekilde bir komut dosyası geliştirirken kullanılır, çünkü herhangi birinden gizlemek istediğiniz veritabanı ve tablo adlarını ortaya çıkarabilir. Yetkisiz Erişim verilerinize. Yukarıdaki durumda, yuvarlak parantezler yerine kaşlı ayraçlar kullanıldığında, hata aşağıdaki gibi görünür:

Önemli hata: "SQLSTATE: Sözdizimi hatası veya erişim ihlali: 1064" mesajıyla yakalanmamış özel durum "PDOException" SQL söz diziminizde bir hata var; "(ad, soyad, e-posta) DEĞERLER ("Thom", "Vial", ") yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin. [e-posta korumalı]")" 1. satırda"

Karşılaşabileceğiniz diğer sorunlar:

  • Yanlış belirtilmiş alanlar (var olmayan alanlar veya yazım hataları).
  • Alan türüyle değer türü uyuşmazlığı. Örneğin bir sayının değerini atamak istediğimizde 47 alan İsim, değerin bir dize olması gerektiği için bir hata alırız. Ancak, örneğin tırnak içinde bir sayı belirtirseniz, “47” , bu alana numaramız string olarak yazılacağı için hata olmayacaktır.
  • Var olmayan bir tabloya veri girilmeye çalışıldı veya tablo adında bir yazım hatası oluştu.

Bu hataların tümü, sorun giderme kılavuzları izlenerek veya hata günlüğü kontrol edilerek düzeltilebilir.

Verileri başarıyla ekledikten sonra veritabanımızda görmeliyiz. Aşağıda, verilerimizi eklediğimiz bir tablo örneği verilmiştir. phpMyAdmin.

Çözüm

Bu kılavuzda, nasıl kullanılacağını öğrendiniz MySQL tablosuna kayıt eklemek için PHP kodu kullanarak MySQLi Ve PDO. Ayrıca yaygın hata durumları ve çözümleri de dikkate alınmıştır. Bir MySQL veritabanına eklemek için PHP kodunun nasıl kullanılacağını bilmek, ister kodlamayı öğreniyor olun ister halihazırda kendi web sitenizi oluşturuyor olun, kullanışlı olacaktır.

Bu yazıda anlatmak istiyorum forma girilen veriler veri tabanına nasıl aktarılır. Ve böylece iki alanımız olacak basit bir form yaratıyoruz: kullanıcı adı ve onun E-posta:

Adınız:
E-posta adresiniz:


Bu form, yeni bir kullanıcıyı kaydetmek, haber göndermek, istatistik toplamak ve her şey için kullanılabilir ... Genel olarak, kullanıcı bu formu verileriyle doldurur: ad ve posta, düğmeyi tıklar ve ardından veriler php betiğine gider:

$isim = $_POST["isim"]; $email = $_POST["email"]; $result = mysqli_query("INSERT INTO user (ad, email) VALUES ("$name", "$email")"); if ($result) ( echo "Veriler başarıyla kaydedildi!"; ) else ( echo "Bir hata oluştu, lütfen tekrar deneyin."; )


Bu komut dosyasında ne oluyor? Şimdi çözelim!
Forma girilen veriler POST yöntemi php betiğine gidin (yukarıda yazılmıştır) ve $_POST global dizisini kullanarak, veriler $name ve $email değişkenlerine dönüştürülür:

$isim = $_POST["isim"]; $email = $_POST["email"];


Değişkenler veri tabanına girilmeye hazır hale geldikten sonra bir sorgu oluşturuyoruz. Ama önce, betiklerinizin zaten veritabanına bağlı olması gerekir, veritabanına nasıl bağlanılacağını bu başlıkta yazdım:.İsteğin kendisi şöyle görünür:

$result = mysqli_query("INSERT INTO user (ad, email) VALUES ("$name", "$email")");


Bu kodda user tablosunda bulunan name ve email hücrelerine şu değişkenlerin ekleneceğini belirtmiştik: $name ve $email .
Ayrıca, her şey yolunda giderse, durumdan bir mesaj alacağız:

Veri başarıyla kaydedildi!


Herhangi bir sorun varsa ve veriler girilmemişse, bir hata mesajı alırız:

Bir hata oluştu. Lütfen tekrar deneyin.


Bu kadar!

*** *** *** *** ***

İsterseniz bilgi girişi için daha fazla alan ekleyebilirsiniz, örneğin kullanıcının şehrini girmek için bir alan eklememiz gerekiyor. Zaten hazır bir komut dosyamız var (yukarıda yazılmıştır), şimdi sadece bir alan ekliyoruz Senin şehirin, değişkene $city adını verelim. Ve böylece veri giriş formunda, sonra:

E-posta adresiniz:


eklemek:

Senin şehirin:


İÇİNDE php betiği, sonrasında:

$email = $_POST["email"];


eklemek:

$şehir = $_POST["şehir"];


Ve tabii ki bunu da şu şekilde talebe ekliyoruz:

$result = mysqli_query("INSERT INTO user (ad, email, city) VALUES ("$name", "$email", "$city")");


Nihai sonuç şu şekilde olmalıdır:
Giriş formu:

Adınız:
E-posta adresiniz:
Senin şehirin:


Senaryo:

$isim = $_POST["isim"]; $email = $_POST["email"]; $şehir = $_POST["şehir"]; $result = mysqli_query("INSERT INTO user (ad, email, city) VALUES ("$name", "$email", "$city")"); if ($result == true) ( ​​​​echo "Veriler başarıyla kaydedildi!";) else ( echo "Bir hata oluştu, lütfen tekrar deneyin.";)


Gördüğünüz gibi, karmaşık bir şey yok! Gerekirse, başka bir alan, başka bir alan ve başka bir alan ekleyebilirsiniz ...