php ile...
PHP'de farklı şekillerde bir veritabanı bağlantısı oluşturma:
1) MySQL'e bağlanmanın eski moda yolu:
$conn=mysql_connect($db_hostname, $db_username, $db_password) or die ("Sunucuya bağlantı yok");
mysql_select_db($db_database,$bağlan) or die("Veritabanına bağlanılamıyor");
Aşağıdaki değişken açıklamaları.
Bu, aşağıdaki işlevleri kullanır:
- mysql_connect()- sunucuya bağlanmak için;
- mysql_select_db()- veritabanına bağlanmak için;
Aynı zamanda, hataları şu şekilde sürekli olarak kontrol ederiz: or die ("Hata falan"); - olarak tercüme eder veya böyle bir hatayla ölür - hatanın nerede olduğunu hemen bulmak için.
config.php
// veritabanına bağlanmak için değişkenler
$host = "localhost"; /ev sahibi
$kullanıcı adı = "kök"; // veritabanına bağlanmak için şifre
$şifre = ""; // veritabanına bağlanmak için şifre - yerel bilgisayarda boş olabilir.
$database_name = "dolgi'm"; // veri tabanı ismi
// veritabanına bağlanmanın eski yolu
mysql_connect($host, $username, $password) or die("Bağlantı oluşturmak için bağlanılamıyor");
// veritabanını seç. Eğer hata - çıktı
mysql_select_db($veritabanı_adı) veya die(mysql_error());
index.php
require_once "config.php";
$result = mysql_query("SELECT Name, Money FROM FROM Money DESC LIMIT 5") or die(mysql_error());
";
while ($satır = mysql_fetch_assoc($sonuç)) (
";
}
mysql_free_result($sonuç);
// Bağlantıyı kapat
mysql_close();
2) Daha ilerici prosedür stili - mysqli kullanarak veritabanına bağlanma:
Bu yoldan:
- daha uygun;
- 40 kata kadar daha hızlı;
- yükseltilmiş güvenlik;
- yeni özellikler ve işlevler var;
Bir tablodan bir seçimle php'de bir veritabanına bağlanma örneği
config.php
// veritabanı bağlantıları
$link = mysqli_connect("localhost", "kullanıcı adı", "şifre", "isim-veritabanı"); // burada verilerinizi doğrudan giriyoruz: kullanıcı adı, şifre ve veritabanı adı, ilk alan genellikle localhost
// çıkış bağlantı hatası
if (!$bağlantı) (
echo "Veritabanına bağlanırken hata oluştu. Hata kodu: " . mysqli_connect_error();
çıkış;
}
Lütfen unutmayın - mysqli her yerde kullanılır, mysql değil !!!
index.php
require_once "config.php";
// İsteği yürüt. Bir hata varsa, çıktı
if ($sonuç = mysqli_query($bağlantı,"İsim SEÇİN, Dolg'dan Para SİPARİŞİ DESC LIMIT 5")) (
echo "İnişimi kime borçluyum:
";
// Sorgu sonuçlarını getir
while ($satır = mysqli_fetch_assoc($sonuç)) (
echo $satır["Ad"] . "borçlu". $satır["Para"] . "ruble.
";
}
// kullanılan belleği serbest bırak
mysqli_free_result($sonuç);
// Bağlantıyı kapat
mysqli_close($bağ);
}
Gördüğünüz gibi, bazı noktalar değişti (italik olarak vurgulandı).
3) MySQL veritabanına bağlanmanın nesne yönelimli yöntemi - yöntemleri ve sınıfları kullanarak:
Eksileri: Daha karmaşık ve hatalara daha az duyarlı.
Artıları: Tecrübeli programcılar için kısalık ve rahatlık.
$bağ = yeni mysqli($db_hostname, $db_username, $db_password, $db_database);
if($bağ->connect_errno)(
die($bağ->bağlantı_hatası);
) else (echo "Veritabanı bağlantısı başarıyla kuruldu";)
Burada, prensip olarak, her şey sezgiseldir:
- $db_hostname ev sahibi(çoğunlukla yerel ana bilgisayar),
- $db_database- veri tabanı ismi;
- $db_username ve $db_password sırasıyla kullanıcı adı ve paroladır!
Bir tablodan bir seçimle php OOP stilinde bir veritabanına bağlanma örneği
config.php
// veritabanı bağlantıları
$mysqli = new mysqli("localhost", "kullanıcı adı", "şifre", "isim-veritabanı"); // burada verilerinizi doğrudan giriyoruz: kullanıcı adı, şifre ve veritabanı adı, ilk alan genellikle localhost
// çıkış bağlantı hatası
if ($mysqli->connect_error) (
die ("Veritabanına bağlanırken hata oluştu: (" . $mysqli->connect_errno . ") " . mysqli_connect_error) ;
}
Lütfen unutmayın - mysqli her yerde kullanılır, mysql değil !!! ve önceki yöntemin aksine, bunun OOP stili olduğunu gösteren "->" okları görünür.
index.php
require_once "config.php";
// İsteği yürüt. Bir hata varsa, çıktı
if ($sonuç = $ mysqli->sorgu("İsim SEÇİN, Dolg'dan Para SİPARİŞİ TANIM LIMIT 5")) (
echo "İnişimi kime borçluyum:
";
// Sorgu sonuçlarını getir
while ($satır = $sonuç-> fetch_assoc()) {
echo $satır["Ad"] . "borçlu". $satır["Para"] . "ruble.
";
}
// kullanılan belleği serbest bırak
$sonuç->kapat();
// Bağlantıyı kapat
$mysqli->kapat();
}
Senin görevin farklılıkları bulmak.
4) PDO kullanarak veritabanı ile iletişim:
Bir MySQL veritabanına bağlanırken, hazırlanmış ifadeler kullanılır (preparasyon yöntemiyle) ve sonuç olarak daha fazla güvenlik ve performansı büyük ölçüde artırır.
yapılandırma dosyasıönceki yöntemden! - aynı
index.php
// MySQL ile iletişim kurmak için PDO stili
if ($stmt = $mysqli->prepare("İsim SEÇ, Voney'den Dolg SİPARİŞİ Paraya Göre< ? LIMIT 5")) {
$stmt->bind_param("i", $toplam);
$toplam = 100000;
// yürütmeyi başlat
$stmt->execute();
// Hazırlanan değerler için değişkenlerin bildirilmesi
$stmt->bind_result($col1, $col2);
echo "İnişimi kime borçluyum:
";
// Sorgu sonuçlarını getir
while ($stmt->fetch()) (
yankı $col1 . "borçlu". $col2 . "ruble.
";
}
// kullanılan belleği serbest bırak
$stmt->kapat();
// Bağlantıyı kapat
$mysqli->kapat();
Gördüğünüz gibi, burada çok daha karmaşık ve PDO çalışmanız gerekiyor - bu ayrı bir konu.
Bu yazımızda MySQL veritabanları (DB) ile çalışırken veritabanından seçim yapmak, veritabanına yazmak, veritabanındaki bilgileri güncellemek ve veritabanından silmek gibi çok önemli noktaları analiz etmek için örnekler kullanacağız. Bütün bunlar, bu makalede ele alınacak olan SELECT, INSERT, UPDATE ve DELETE ifadeleri olmak üzere dört ifade kullanılarak yapılacaktır.
Bu nedenle, tüm alanları veritabanından çıkarmanız gerekiyorsa, aşağıdaki kodu kullanın.
$sonuç = mysql_query("first_table'dan * SEÇİN",$db);
Yıldız işareti, tüm alanları tablodan çekmeniz gerektiği anlamına gelir.
Yalnızca bazı alanları çıkarmanız gerekiyorsa, örneğin ad ve soyadı.
$sonuç = mysql_query("isim SEÇ, soyadı FROM first_table", $db);
name, last_name - kullanıcıların ad ve soyadlarını içeren alanlar.
Kesin veriyi almanız gerekiyorsa, örneğin, veritabanındaki belirli bir adla tüm kullanıcıların soyadı (ad, $name değişkenine girilecektir).
name='$name' - Ad alanı, $name değişkenine eşittir.
Bir koşula ek olarak, birkaçını da listeleyebiliriz, örneğin, belirli bir ad ve soyadına sahip tüm kullanıcıların kimliğini almamız gerekir (ad ve soyadı sırasıyla $name ve $last_name değişkenlerine girilecektir). ). Bunun için aşağıdaki kodu kullanabiliriz.
Örneğin, birkaç koşuldan birinin karşılandığı kayıtları almamız gerekirse, adı veya soyadı koşullarda belirtilenlerle eşleşen tüm kullanıcıların tanımlayıcılarını alın.
Sonucu bazı parametrelere göre sıralamanız gerekiyorsa, örneğin ada göre.
$sonuç = mysql_query("SELECT * FROM first_table SİPARİŞ ADINA GÖRE ",$db);
Ada göre SİPARİŞ - ada göre sıralayın.
Gerekirse ters sırada sıralayın.
$sonuç = mysql_query("SELECT * FROM first_table SİPARİŞ ADINA GÖRE DESC ",$db);
DESC - ters sırada.
Veritabanından yalnızca belirli sayıda alan çekmeniz gerekiyorsa. Örneğin, ilk beş alanı çıkarmanız gerekir.
$result = mysql_query("SELECT * FROM first_table ORDER BY id LIMIT 5 ",$db);
LIMIT 5 - veritabanından yalnızca ilk beş sonucu alın.
Bunlar, veri tabanından alınan küçük örnek örneklerdi. Şimdi, örneğin sonucu ekranda görüntülemek için, alınan sonucun daha fazla kullanım için bir diziye nasıl dönüştürüleceğine bakalım. Bunun için PHP'nin özel bir mysql_fetch_array().
İşlev yürütmenin sonucunu bir değişkene koyabiliriz, örneğin, depolayacak $myrow değişkeni. Bir fonksiyon parametresi olarak mysql_fetch_array() fonksiyon yürütmenin sonucu iletilecek mysql_query(). Bütün bunlar böyle görünecek.
$myrow = mysql_fetch_array($sonuç);
Şimdi $myrow ilişkisel dizisinin öğelerine erişebiliriz. Örnek olarak, id =1 olan kullanıcı adını gösteren koda bir göz atalım. Veritabanı olarak önceki makaledeki db_first veritabanı kullanılacaktır.
/*Veritabanına bağlanın*/ $db = mysql_connect("MySQL Server","Veritabanı Kullanıcısı","Veritabanına erişim şifresi"); mysql_select_db("db_name", $db); /*Veritabanına bir sorgu yapın*/ $result = mysql_query("first_table WHERE id="$id"",$db'den isim seçin); /*Sonucu bir diziye çevir*/ $myrow = mysql_fetch_array($result); /*Sonucu göster*/ echo $myrow["name"];
Gördüğünüz gibi, her şey çok basit ve açık.
Şimdi, veritabanına bilgi eklemekten sorumlu olan bir sonraki INSERT ifadesine geçelim.
Veritabanına bilgi ekleme. INSERT ifadesi
INSERT ifadesi, bir veritabanına bilgi eklemek için kullanılır. Eklemekten sorumlu olan kod aşağıdaki sözdizimine sahiptir.
$result = mysql_query("INSERT INTO tablosu(alan 1, alan 2, alan N) DEĞERLER("değer 1", "değer 2", "değer N")");
Örneğin, first_table tablosuna yeni bir kullanıcının adını ve soyadını eklememiz gerekiyor. Bunun için aşağıdaki kodu kullanabilirsiniz.
$result = mysql_query ("first_table'a GİRİN (isim, soyadı) DEĞERLER ("$ad", "$son_ad")");
$name ve $last_name, yeni kullanıcının adını ve soyadını içeren değişkenlerdir.
Kullanabilirsiniz .
$result = mysql_query ("first_table'a GİRİN (isim, soyadı) DEĞERLER ("$ad", "$son_ad")"); if ($result == "true") ( echo "Giriş başarıyla eklendi!"; ) else ( echo "Giriş eklenmedi!"; )
Diğer bir deyişle, $sonuç değişkeni doğru olursa, girişin eklendiğine dair bir mesaj görüntülenecektir. Aksi takdirde kaydın veritabanına eklenmediğini gösterecektir.
Veritabanındaki bilgileri güncelleyin. GÜNCELLEME ifadesi
UPDATE ifadesi, veritabanında zaten var olan bilgileri güncellemek için kullanılır. Bu durumda mysql_query işlevinin sözdizimi aşağıdaki gibidir.
Şimdi bir örneğe geçelim. Diyelim ki db_name tablosundaki $id kullanıcısının adını ve soyadını değiştirmemiz gerekiyor. Bunun için aşağıdaki kodu kullanabilirsiniz.
Şimdi yazının son kısmına geçelim ve veri tabanından bilgi silmekten sorumlu olan son DELETE deyimine bakalım.
Veri tabanından bilgi kaldırma. DELETE ifadesi
DELETE ifadesi, bir veritabanından alanları kaldırmak için kullanılır. Bu durumda mysql_query() işlevinin sözdizimi aşağıdaki gibidir.
Şimdi her zamanki gibi bir örneğe geçelim. Diyelim ki $id olan kullanıcıyı db_name tablosundan kaldırmamız gerekiyor. Bunun için aşağıdaki kodu kullanabilirsiniz.
Bu, bu makaleyi sonuçlandırıyor. Materyal zor değil, ancak metin üzerinden açıklamak oldukça zor. Yine de, yukarıdaki malzemenin özünü anladığınızı düşünüyorum. Bu makale hakkında herhangi bir sorunuz varsa, onlara her zaman yorumlarda sorabilirsiniz.
Bu kadar. PHP ve MySQL öğrenmede iyi şanslar ve başarılar.
VTYS MySQL PHP tarafından desteklenen birçok veritabanından biridir. MySQL sistemi ücretsiz olarak dağıtılmaktadır ve gerçek sorunları çözmek için yeterli güce sahiptir.
MySQL'e Kısa Bir Giriş
SQL kelimelerin kısaltmasıdır Yapılandırılmış sorgu dili, Yapılandırılmış Sorgu Dili anlamına gelir. Bu dil, çeşitli veritabanlarına erişmek için standart araçtır.
MySQL sistemi, uzak bilgisayar kullanıcılarının bağlanabileceği bir sunucudur.
Veritabanlarıyla çalışmak için, Web geliştirici kitinde bulunan aracı kullanmak uygundur: Denwer phpMyAdmin. Burada yeni bir veritabanı oluşturabilir, seçilen veritabanında yeni bir tablo oluşturabilir, tabloyu verilerle doldurabilir ve verileri ekleyebilir, silebilir ve düzenleyebilirsiniz.
MySQL, üç temel veri türünü tanımlar: sayısal, tarih saat ve dize. Bu kategorilerin her biri birçok türe ayrılmıştır. Başlıcaları:
Veri türünden sonraki her sütun, diğer belirteçleri içerir:
Bir çeşit | Tanım |
---|---|
GEÇERSİZ DEĞİL | Tüm tablo satırları bu öznitelikte bir değere sahip olmalıdır. Belirtilmezse alan boş olabilir (BOŞ) |
OTOMATİK ARTIŞ | Sayısal sütunlarda kullanılabilen özel bir MySQL özelliği. Bir tabloya satır eklerken bu alanı boş bırakırsanız, MySQL otomatik olarak benzersiz bir tanımlayıcı değeri oluşturur. Bu değer, sütunda zaten mevcut olan maksimum değerden bir fazla olacaktır. Her tablonun en fazla böyle bir alanı olabilir. AUTO_INCREMENT içeren sütunlar dizine eklenmelidir |
BİRİNCİL ANAHTAR | Sütun, tablonun birincil anahtarıdır. Bu sütundaki veriler benzersiz olmalıdır. MySQL bu sütunu otomatik olarak indeksler |
İMZASIZ | Tamsayı türünden sonra, değerinin pozitif veya boş olabileceği anlamına gelir. |
YORUM | Tablo sütun adı |
Yeni MySQL Veritabanı Oluşturma VERİTABANI YARAT.
VARSA VERİTABANI OLUŞTURMA 'temel' VARSAYILAN KARAKTER SET cp1251 COLLATE cp1251_bin
Yeni bir tablo oluştur SQL komutu kullanılarak gerçekleştirilir TABLO OLUŞTUR. Örneğin, bir kitapçının kitaplar tablosunda beş alan bulunur: ISBN, yazar, başlık, fiyat ve kopya sayısı:
CREATE TABLE kitapları (ISBN CHAR(13) NULL DEĞİL, BİRİNCİL ANAHTAR (ISBN), yazar VARCHAR(30), başlık VARCHAR(60), fiyat FLOAT(4,2), miktar TINYINT UNSIGNED); Tablo zaten mevcutsa bir hata mesajını önlemek için, "IF NOT EXISTS" ifadesini ekleyerek ilk satırı değiştirmeniz gerekir: CREATE TABLE IF NOT EXISTS kitaplar...
oluşturmak için otomatik güncelleme alanı TIMESTAMP veya DATETIME türündeki geçerli tarihle aşağıdaki yapıyı kullanın:
TABLO OLUŞTUR t1 (ts TIMESTAMP VARSAYILAN GÜNCELLEME CURRENT_TIMESTAMP CURRENT_TIMESTAMP, dt DATETIME VARSAYILAN CURRENT_TIMESTAMP GÜNCELLEME CURRENT_TIMESTAMP);
zeyilname bu tablodaki veriler SQL komutu kullanılarak gerçekleştirilir SOKMAK. Örneğin:
KİTAPLARA EKLE (ISBN, yazar, başlık, fiyat, miktar) DEĞERLER ("5-8459-0184-7", "Zandstra Mat", "Kendinize PHP4'ü 24 Saatte Öğrenin", "129", "5");
Operatör, bir tablodan veri almak için kullanılır. SEÇME. Belirtilen arama kriterlerine uyan satırları seçerek veri tabanından veri alır. SELECT ifadesi, çok sayıda seçenek ve kullanım durumuyla birlikte gelir.
* sembolü, tüm alanların gerekli olduğu anlamına gelir. Örneğin:
SEÇ * kitaplardan;
Yalnızca belirli bir alana erişmek için adını SELECT deyiminde belirtmelisiniz. Örneğin:
Kitaplardan yazar, başlık, fiyat SEÇİN;
Bir tablodaki satırların bir alt kümesine erişmek için, yapı tarafından belirlenen bir seçim ölçütü belirtmelisiniz. NEREDE. Örneğin, PHP hakkında mevcut ucuz kitapları seçmek için bir sorgu oluşturursunuz:
SEÇ * NEREDE kitaplardan fiyat % Herhangi bir sayıda karakterle eşleşir, sıfır bile
_ Tam olarak bir karakterle eşleşir
Sorgu ile alınan satırların belirli bir sırada listelenebilmesi için yapı kullanılır. TARAFINDAN SİPARİŞ. Örneğin:
* SEÇİMLERDEN FİYATA GÖRE SİPARİŞ;
Varsayılan emir sıralama artan sırada gider. Anahtar kelimeyi kullanarak sıralama düzenini tersine çevirebilirsiniz. TANIM:
SEÇİM * Kitaplardan FİYATA GÖRE SİPARİŞ TANIM;
Çeşit Birden çok sütun da kullanabilirsiniz. Sütun adları yerine seri numaralarını kullanabilirsiniz:
4, 2, 3 TARAFINDAN SİPARİŞ EDİLEN kitaplardan * SEÇİNİZ;
Tabloda daha önce kaydedilmiş değerleri değiştirmek için şu komutu kullanın: GÜNCELLEME. Örneğin, tüm kitapların fiyatı %10 arttı:
GÜNCELLEME kitaplar SET fiyatı = fiyat * 1.1;
WHERE yan tümcesi, GÜNCELLEME'yi belirli satırlarla sınırlayacaktır. Örneğin:
GÜNCELLEME kitaplar SET fiyatı = fiyat * 1.05 NEREDE fiyat
Bir veritabanından satırları kaldırmak için deyimi kullanın SİLMEK. Gereksiz satırlar WHERE yan tümcesi kullanılarak belirtilir. Örneğin, bazı kitaplar satılmaktadır:
miktar = 0 olan kitaplardan sil;
Tüm girişleri silmek istiyorsanız
TRUNCATE TABLE tablo_adı
Bir tabloyu tamamen silmek için şunu kullanın:
DROP TABLE tablo_adı
MySQL veritabanı ile PHP iletişimi
Bir veritabanı oluşturmak için phpMyAdmin ile çalıştıktan sonra, bu veritabanını harici Web arayüzüne bağlamaya başlayabilirsiniz.
PHP kullanarak Web'den bir veritabanına erişmek için aşağıdaki temel adımlar gerçekleştirilmelidir:
- MySQL sunucusuna bağlanma.
- Veritabanı seçimi.
- Bir veritabanı sorgusu yürütme:
- ilave;
- kaldırma;
- değiştirmek;
- Arama;
- sıralama.
- Bir sorgunun sonucunu alma.
- Veritabanından ayırma.
PHP'de bir veritabanı sunucusuna bağlanmak için bir fonksiyon vardır. mysql_connect(). Argümanları bilgisayar adı, kullanıcı adı ve şifredir. Bu argümanlar atlanabilir. Varsayılan olarak bilgisayar adı = localhost , kullanıcı adı ve şifre gerekli değildir. PHP, Apache sunucusuyla birlikte kullanılıyorsa, işlevi kullanabilirsiniz. mysql_pconnect(). Bu durumda, program sona erdikten veya işlev çağrıldıktan sonra sunucuyla bağlantı kesilmez. mysql_close(). Fonksiyonlar mysql_connect() ve mysql_pconnect() her şey yolunda giderse bağlantı kimliğini iade edin. Örneğin:
$bağ = mysql_pconnect(); if (!$link) die ("MySQL'e bağlanılamıyor");
MySQL sunucusuna bağlantı kurulduktan sonra bir veritabanı seçmeniz gerekiyor. Bunun için fonksiyon kullanılır. mysql_select_db(). Argümanı veritabanının adıdır. Belirtilen veritabanı varsa ve erişilebilirse işlev true değerini döndürür. Örneğin:
$db = "örnek"; mysql_select_db($db) or die("$db açılamıyor");
Veri eklemek, silmek, değiştirmek ve seçmek, bir SQL sorgusu oluşturmayı ve yürütmeyi gerektirir. Bunu yapmak için PHP'nin bir işlevi vardır. mysql_query(). Argümanı bir sorgu dizesidir. İşlev, istek kimliğini döndürür.
örnek 1
Örnek 1'i her çalıştırdığınızda, aynı verileri içeren tabloya yeni bir kayıt eklenecektir. Elbette kullanıcı tarafından girilen verilerin veritabanına eklenmesi mantıklıdır.
Örnek 2-1, veritabanına yeni kitaplar eklemek için bir HTML formunu gösterir.
Örnek 2.1
Bu formu doldurmanın sonuçları insert_book.php dosyasına aktarılır.
Örnek 2.2
Örnek 2.2'de, girilen dizi verileri fonksiyon tarafından işlenir. ekler(). Bu işlev, tek tırnak işaretinden ("), çift tırnak işaretinden ("), ters eğik çizgiden (\) ve boş bayttan önce ters eğik çizgi ekler. Gerçek şu ki, veritabanı sorgu sözdiziminin gereksinimlerine göre, bu tür karakterlerin tırnak içine alınması gerekir.
Sorgu sonucundaki kayıt sayısını belirlemek için işlevi kullanın. mysql_num_rows().
Tüm sorgu sonuç kayıtları bir döngü içinde görüntülenebilir. Bundan önce, işlevi kullanarak mysql_fetch_ her giriş için bir ilişkisel dizi elde edilir.
Örnek 3.1, bir veritabanında belirli kitapları aramak için bir HTML formudur.
Örnek 3.1
Bu formun sonuçları search_book.php'ye iletilir.
Örnek 3.2
".($i+1). $satır["başlık"]. "
Alternatif seçenek
Lütfen geri dönün ve yazmayı bitirin"); $searchterm =addslashes($searchterm); mysql_connect() or die ("MySQL'e bağlanılamıyor"); mysql_select_db ("örnek") veya die ("DB açılamıyor" ); $ sonuç = mysql_query ("SELECT * NERDEKİ kitaplardan ".$_POST["searchtype"]." like "%".$searchterm."%""); $i=1; while($row = mysql_fetch_array( $sonuç) ) ( yankı "
".($i++) .$satır["başlık"]."
"; echo "Yazar: ".$row["yazar"]."
"; echo "ISBN: ".$satır["ISBN"]."
"; echo "Fiyat: ".$satır["fiyat"]."
"; echo "Miktar: ".$satır["miktar"]."
Peki Web veritabanı mimarisi nasıl çalışır:
- Kullanıcının web tarayıcısı, belirli bir web sayfası için bir HTTP isteği gönderir. Örneğin, bir HTML formu kullanan bir kullanıcı tüm PHP kitaplarını arar. Form işleme sayfasına search_book.php adı verilir.
- Web sunucusu search_book.php için bir istek alır, bu dosyayı alır ve işlenmek üzere PHP motoruna iletir.
- PHP, MySQL sunucusuna bağlanır ve isteği gönderir.
- Sunucu bir veritabanı isteği alır, onu işler ve sonucu (kitapların bir listesi) PHP motoruna geri gönderir.
- PHP motoru komut dosyasının yürütülmesini tamamlar, sorgu sonucunu HTML olarak biçimlendirir. Sonuç daha sonra Web sunucusuna HTML olarak döndürülür.
- Web sunucusu HTML'yi tarayıcıya gönderir ve kullanıcı istenen kitap listesini görebilir.
İşlem mekanizmasını kullanma
Bir kişiden diğerine nasıl para transfer edileceğine örnek olarak işlem mekanizmasını kullanmak
If(mysql_query ("BEGIN") && mysql_query ("GÜNCELLEME para SET amt = amt - 6 NEREDE isim = "Havva"") && mysql_query ("GÜNCELLEME para SET amt = amt + 6 NEREDE isim = "Ida"") && mysql_query ("COMMIT"))( echo "Success"; )else( mysql_query ("ROLLBACK"); echo "Başarılı değil"; )
GÜNCELLEME İÇİN SEÇİN
Aynı tabloda seçme sorgusu yapan birden çok işlem çalıştırırsanız, aynı kaydı aynı anda seçebilirler.
Yukarıda bahsedilen durumdan kaçınmak için, yalnızca bir SELECT sorgusu değil, birçoğunun şüphelenmediği genişletilmiş sürümünü de yürütmek gerekir: SELECT ... FOR UPDATE.
Böylece, bu sorgu yürütülürken, veritabanındaki tüm etkilenen kayıtlar, veritabanı ile oturum tamamlanana veya bu kayıtlar güncellenene kadar kilitlenecektir. Başka bir komut dosyası, belirtilen koşullardan biri gerçekleşene kadar kilitli kayıtları seçemez.
Ancak, hepsi o kadar basit değil. Birkaç şartı daha yerine getirmeniz gerekiyor. Öncelikle tablonuz InnoDB mimarisine dayalı olmalıdır. Aksi takdirde, engelleme basitçe çalışmayacaktır. İkinci olarak, getirme işlemini gerçekleştirmeden önce, sorgunun otomatik olarak tamamlanmasını devre dışı bırakmalısınız. Şunlar. başka bir deyişle, isteğin otomatik olarak yürütülmesi. Bir GÜNCELLEME isteği belirledikten sonra, veritabanıyla tekrar iletişime geçmeniz ve COMMIT komutunu kullanarak değişiklikleri gerçekleştirmeniz gerekecektir:
Kendim için PHP'de basit bir olay veritabanı yaptım ve e-posta ile bir hatırlatma yaptım. PHP'de bir veritabanı ile çalışmak için bir örnek olarak yapacaktır.
Veritabanı elbette MySQL'dir.
Tablolar, buradaki PHP anket oluşturma örneğinde açıklandığı gibi phpMyAdmin aracılığıyla manuel olarak oluşturulabilir, ancak burada sorguları kullanarak işaretleri oluşturacağım.
Tablo oluşturma dosyası create.php'dir (1 kez çalıştırırız, ardından tabloları oluşturduktan sonra sileriz).
/* Переменные для соединения с базой данных */ $hostname = "localhost"; $username = "user"; $password = "password"; $dbName = "database"; /* создать соединение */ mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); $query = "CREATE TABLE count (nn int(20))"; $res = mysql_query($query); $query = "INSERT INTO count VALUES("0")"; $res = mysql_query($query); $query = "CREATE TABLE count1 (nn int(20))"; $res = mysql_query($query); $query = "INSERT INTO count1 VALUES("0")"; $res = mysql_query($query); $query = "CREATE TABLE usvers (nn int(20), name VARCHAR(240), adres VARCHAR(240))"; $res = mysql_query($query); $query = "CREATE TABLE sobbit (nn int(20), usver VARCHAR(240), sobit VARCHAR(240), opsobit text(64000), kogda DATETIME)"; $res = mysql_query($query); /* Закрыть соединение */ mysql_close(); ?>
Kullanıcı kayıt formu add.php
Veritabanına giriş ve şifre add1.php giriyoruz
/* Этот скрипт получает переменные из add.php */ /* Переменные для соединения с базой данных */ $hostname = "localhost"; $username = "user"; $password = "password"; $dbName = "database"; /* Таблица MySQL, в которой хранятся данные */ $userstable = "count"; /* создать соединение */ mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); $name = mysql_real_escape_string($name); $adres = mysql_real_escape_string($adres); $query = "SELECT * FROM $userstable"; $res1 = mysql_query($query); while ($row = mysql_fetch_row($res1)) $nn=$row+1; $query = "UPDATE $userstable SET nn=$nn"; mysql_query($query) or die(mysql_error()); /* Таблица MySQL, в которой хранятся данные */ $userstable = "usvers"; /* создать соединение */ mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); /* составить запрос для вставки информации о клиенте в таблицу */ $query = "INSERT INTO $userstable VALUES("$nn", "$name","$adres")"; /* Выполнить запрос. Если произойдет ошибка - вывести ее. */ mysql_query($query) or die(mysql_error()); echo "Информация о вас занесена в базу данных."; /* Закрыть соединение */ mysql_close(); ?>İçeri gel
Kayıtlı.
Şimdi login ve password giriş formu login.php
Şifreyi hatırlat
Kullanıcı adı ve şifreyi doğru girdikten sonra olayların listesini ekrana getiriyoruz see.php
"; ) else ( echo "Kullanıcının gönderileri ".$name."
"; /* Verilerin depolandığı MySQL tablosu */ $userstable = "sobbit"; /* bağlantı oluştur */ mysql_connect($hostname,$username,$password) VEYA DIE("Can't create connection "); /* veritabanı seç Bir hata oluşursa, görüntüleyin */ mysql_select_db($dbName) or die(mysql_error()); $query = "SELECT * FROM $userstable WHERE usver = "".$name."" "; $res = mysql_query ($query) or die(mysql_error()); /*MySQL veritabanından satırları al */ while ($row=mysql_fetch_array($res)) ( echo $row["sobit"]." ".$row[ "opsobit "]." ".$row["kogda"]; /* Verileri ve kayıtları düzenlemek için bir düğme içeren bir tablo çizin */ echo " "; Eko "
"; ) /* Yeni bir olay girmek için bir form çizin */ echo "
Olay plakasının altında yeni bir olay girmek için bir form ve Ekle düğmesi üzerine tıkladığınızda seeadd.php açılır, olay eklenir ve yeni olay ile plaka ve giriş formu tekrar görüntülenir. Her şeyin doğru girilebilmesi için tarih formatına ve kodlamaya dikkat etmeniz gerekiyor.
"; ) else ( /* Verilerin depolandığı MySQL tablosu */ $userstable = "count1"; /* bağlantı oluştur */ mysql_connect($hostname,$username,$password) VEYA DIE("Bağlantı oluşturulamıyor ") ; /* bir veritabanı seçin, eğer bir hata oluşursa onu görüntüleyin */ mysql_select_db($dbName) veya die(mysql_error()); $name = mysql_real_escape_string($name); $asobit = mysql_real_escape_string($asobit); $aopsobit = mysql_real_escape_string ($aopsobit); $akogda = mysql_real_escape_string($akogda); $query = "SELECT * FROM $userstable"; $res1 = mysql_query($query); while ($row = mysql_fetch_row($res1)) $nn=$ satır +1; $query = "UPDATE $userstable SET nn=$nn"; mysql_query($query) or die(mysql_error()); /* Verilerin depolandığı MySQL tablosu */ $userstable = "sobbit"; /* bir bağlantı oluştur */ mysql_connect($hostname,$username,$password) VEYA DIE("Can't create a connection "); /* veritabanı seç. Bir hata oluşursa, göster */ mysql_select_db($dbName) veya öl (mysql_error()); /* için bir istek yap olay bilgilerini tabloya ekleme */ $query = "$userstable DEĞERLERİNE EKLE("$nn", "$name","$asobit","$aopsobit","$akogda"); /* İsteği yürüt. Bir hata oluşursa, çıktısını alın. */ mysql_query($sorgu) veya die(mysql_error()); echo "Olay bilgileri veritabanına eklendi."; ?>
echo "Записи пользователя ".$name."
"; /* bağlantı oluştur */ mysql_connect($hostname,$username,$password) OR DIE("Bağlantı oluşturulamıyor "); /* veritabanı seç. Hata oluşursa yazdır */ mysql_select_db($dbName) or die(mysql_error()); $query = "SELECT * FROM $userstable WHERE usver = "".$name."" "; $res = mysql_query($query) or die(mysql_error()); while ($row) = mysql_fetch_array($res)) ( echo $satır["sobit"]." ".$satır["opsobit"]." ".$satır["kogda"]; echo "
"; ) Eko "
Tabloda Değiştir düğmesi, daha önce girilen girişi değiştirme formuyla change.php'yi açar.
"; ) başka ( yankı " "; Eko "
"; ) Eko "
Değiştirilen olay ve giriş formu içeren tablo yeniden görüntülenir.
Cron'a yerleştirilmiş olan prover.php dosyası, zaman içinde süresi dolan olaylar için veritabanını kontrol eder, bulursa kullanıcının e-postasına bir hatırlatma gönderir.
".$satır["ne zaman"]."
Dikkat!
Bu mektup gönderildi robot Ve cevap vermek zorunda değilsin!"; $başlıklar = "Kimden: ".$row["usver"]."<".$row["usver"].">\r\nİçerik türü: metin/html; charset=windows-1251 \r\n"; mail ($to, $subject, $message, $headers); ) else ( ) ) /* Bağlantıyı kapat */ mysql_close(); ?>
Ve son olarak, kullanıcıya unutulan şifreyi e-posta ile gönderen bir form.
Unutulan şifre hatırlatma için giriş formu, dosya Forgot.php.
"Gönder" düğmesine tıkladığınızda, şifreyi kullanıcının e-postasına gönderen Forgot1.php dosyası başlatılır.
"; ) else ( $to = $row["name"]; $subject = "".$row["name"] için parola kurtarma; $message = "Giriş: ".$row["name"]."
Şifre:".$row["adres"]; $headers = "Kimden: ".$row["ad"]."<".$row["name"].">\r\nİçerik türü: metin/html; charset=windows-1251 \r\n"; mail ($to, $subject, $message, $headers); echo "Bilgi belirtilen adrese gönderildi."; ) /* Bağlantıyı kapatın */ mysql_close(); ? > Giriş
Sonuç, olayların kullanıcının e-postasına bildirilmesi işlevine sahip basit bir olay veritabanıdır:
Ek olarak, etkinlik listesi bir tablet şeklinde düzenlenebilir, ayrıca satırları silmek için tabloya bir "Sil" düğmesi ekleyebilir, hatırlatma mektubundaki bağlantıya hemen tıklayarak etkinlikleri "kapatmayı" mümkün kılabilirsiniz. , adres çubuğu aracılığıyla iletilen bir tür şifre şifrelemesi yapın .
Ve böylece yukarıda sunulan kod parçalarını sayfa şablonlarına ekleyebilir, güzel olması için siteye yükleyebilirsiniz ve e-posta ile çevrimiçi bir etkinlik hatırlatıcısı olacaktır.
Etkili depolama ve büyük miktarda bilginin alınması, İnternet'in başarılı gelişimine büyük katkı sağlamıştır. Tipik olarak, veritabanları bilgi depolamak için kullanılır. Yahoo, Amazon ve Ebay gibi tanınmış siteler, büyük miktarda bilgi depolayan veritabanlarının güvenilirliğine büyük ölçüde güveniyor. Tabii ki, veritabanı desteği yalnızca dev şirketler için değildir - web programcıları, nispeten düşük maliyetle (ücretsiz değilse) birkaç güçlü veritabanı uygulamasına sahiptir.
Uygun veritabanı organizasyonu, daha hızlı ve daha esnek veri alma seçenekleri sağlar. Arama ve sıralama araçlarının uygulanmasını büyük ölçüde basitleştirir ve bilgiye erişim hakları sorunları, birçok veritabanı yönetim sisteminde (DBMS) bulunan ayrıcalık kontrol araçlarının yardımıyla çözülür. Ayrıca, veri kopyalama ve arşivleme süreçleri basitleştirilmiştir.
Bölüm, muhtemelen PHP'de kullanılan en popüler DBMS (http://www.mysql.com) olan MySQL'de veri alma ve güncellemenin ayrıntılı bir açıklamasıyla başlar. MySQL örneği, PHP'nin veritabanındaki verileri nasıl yüklediğini ve güncellediğini gösterecektir; birçok web uygulamasında kullanılan temel arama ve sıralama araçlarına bakacağız. Daha sonra PHP'nin aynı anda farklı DBMS'lere bağlanmak için kullanılabilecek genel bir arayüz olan ODBC (Açık Veri Tabanı Bağlantısı) desteğine geçiyoruz. PHP'deki ODBC desteği, bir Microsoft Access veritabanından veri bağlama ve alma örneği kullanılarak gösterilecektir. Bölüm, favori siteler hakkında bilgi içeren hiyerarşik bir dizin oluşturmak için PHP ve MySQL kullanan bir proje ile sona ermektedir. Kataloğa yeni siteler eklendiğinde, kullanıcı bunları site yöneticisi tarafından tanımlanan standart kategorilerden birine atar.
MySQL tartışmasına geçmeden önce, veritabanlarıyla çalışmak için en yaygın kullanılan dil olan SQL hakkında birkaç söz söylemek istiyorum. SQL dili, neredeyse tüm mevcut DBMS'lerin temelidir. Veritabanlarıyla çalışma örneklerini ele almaya devam etmek için, SQL'in nasıl çalıştığı hakkında en azından genel bir fikre sahip olmak gerekir.
SQL nedir?
SQL genellikle ilişkisel veritabanlarıyla etkileşimde kullanılan standart dil olarak tanımlanır (aşağıya bakın). Ancak SQL, C, C++ veya PHP gibi bir programlama dili değildir. Bunun yerine, veritabanlarıyla çeşitli işlemleri gerçekleştirmek için kullanıcıya standart bir komut seti sağlayan bir arayüz aracıdır. SQL'in olanakları, bir veritabanından veri almakla sınırlı değildir. SQL, aşağıdakiler dahil, veritabanı ile etkileşim için çeşitli seçenekler sunar:
- veri yapısı tanımı
SQL tanımının, dilin birlikte çalışmak üzere tasarlandığını söylediğini unutmayın. ilişkisel veritabanları. İlişkisel VTYS'ler, verileri birbiriyle ilişkili bir dizi tablo halinde düzenler. Tablolar arasındaki ilişkiler, diğer tablolardaki verilere bağlantılar olarak uygulanır. masa her bir elemanın konumunun belirli satır ve sütun değerleri ile karakterize edildiği iki boyutlu bir dizi olarak düşünülebilir. İlişkisel bir veritabanı örneği, Şekil 2'de gösterilmektedir. 11.1.
Pirinç. 11.1.İlişkisel veritabanı örneği
Olarak Şekil l'de görülebilir. 11.1, her tablo satırlardan (kayıtlardan) ve sütunlardan (alanlardan) oluşur. Her alana benzersiz (verilen tablo içinde) bir ad atanır. Bir okla gösterilen müşteri ve sipariş tabloları arasındaki ilişkiye dikkat edin. Sipariş bilgileri, müşterinin adının ve diğer ayrıntıların fazladan depolanmasını önleyen kısa bir müşteri tanımlayıcısı içerir. Gösterilen veritabanında siparişler ve ürünler tabloları arasında başka bir ilişki var. Bu ilişki, bu müşteri tarafından sipariş edilen ürünün tanımlayıcısını (custjd alanı tarafından belirlenir) saklayan prod_id alanı tarafından kurulur. Bu ilişkilerin varlığı, basit tanımlayıcılarla eksiksiz müşteri ve ürün verilerine başvurmayı kolaylaştırır. Düzgün organize edilmiş bir veritabanı, verileri minimum fazlalık ile verimli bir şekilde düzenlemek ve depolamak için güçlü bir araca dönüşür. Bu veri tabanını aklınızda bulundurun, bundan sonraki örneklerde sık sık değineceğim.
Peki ilişkisel veritabanı işlemleri nasıl yapılır? Bunu yapmak için SQL'in SELECT, INSERT, UPDATE ve DELETE gibi özel bir ortak komut seti vardır. Örneğin, 2001cu kimliğine sahip bir müşterinin e-posta adresini almanız gerekiyorsa (bkz. Şekil 11.1) aşağıdaki SQL komutunu çalıştırmanız yeterlidir:
custjd = "2001cu" NEREDE müşterilerden cust_email SEÇİN
Her şey oldukça mantıklı, değil mi? Özetle, komut şöyle görünür:
tablo_adı FROM alan_adı SEÇ [ NEREDE koşul ]
Köşeli parantezler, komutun son kısmının isteğe bağlı olduğu anlamına gelir. Örneğin, müşteriler tablosundaki tüm müşterilerin e-posta adreslerini almak için aşağıdaki sorguyu çalıştırmanız yeterlidir:
Müşterilerden cust_email SEÇİN
Ürünler tablosuna yeni bir kayıt eklemek istediğinizi varsayalım. En basit ekleme komutu şöyle görünür:
DEĞERLER ("1009pr", "Red Tomatoes", "1.43");
Daha sonra bu verileri silmeniz gerekirse, aşağıdaki komutu kullanın:
prod_id = 1009r NEREDE ürünlerden SİL";
Birçok SQL komutu çeşidi vardır ve bunların tam bir açıklaması bu kitabın kapsamı dışındadır. Bu konuda ayrı bir kitap yazılabilir! Örneklerde kullanılan SQL komutlarının nispeten basit ama yeterince gerçekçi olduğundan emin olmaya çalıştım. Web'de SQL hakkında birçok öğretici bilgi ve kaynak var. Bu bölümün sonunda bazı bağlantılar verilmiştir.
SQL komutlarını büyük harflerle yazmak gerekli değildir. Ancak, bu gösterimi tercih ediyorum çünkü isteğin bileşenleri arasında ayrım yapmaya yardımcı oluyor.
Bu kitabı okuduğunuza göre, muhtemelen veritabanlarının Web'de nasıl çalıştığını merak ediyorsunuz? Kural olarak, önce bazılarıyla
veya bir arayüz dili (PHP, Java veya Perl), veritabanına bir bağlantı oluşturulur, ardından program standart araç setini kullanarak sorgularla veritabanına erişir. Arayüz dili, veritabanını Web'e bağlayan bir tür "tutkal" olarak düşünülebilir. Favori ön uç dilim olan PHP'ye geçiyorum.
Ek kaynaklar
Aşağıda SQL'deki bazı İnternet kaynakları listelenmiştir. Hem yeni başlayanlar hem de deneyimli programcılar için kullanışlıdır.
- SQL Öğreticileri: http://perl.about.com/compute/perl/cs/beginningsql/index.htm.
- SQLCourse.com (örnek veritabanı ile): http://www.sqlcourse.com .
- Web Meraklıları için SQL: http://www.arsdigita.com/books/sql.
- SQL'e Giriş (MySQL'e uygulandığı gibi): http://www.devshed.com/Server_side/MySQL/Intro.
PHP'de veritabanı desteği
PHP'nin en önemli yönünü belirtmem istenseydi, muhtemelen veritabanı desteğine odaklanırdım. PHP, aşağıdakiler dahil hemen hemen her mevcut veritabanı sunucusu için kapsamlı bir desteğe sahiptir:
PostgreSQL | ||
Sağlam | ||
Sybase | ||
UNIX veritabanı | ||
File-Pro (salt okunur) |
Velodlar | |
Oracle (OCI7 ve OC18) |
Bu listenin gösterdiği gibi, PHP'nin veritabanı desteği, herkesin bildiği (Oracle gibi) veritabanlarıyla uyumlu olmaktan, birçoğunun hiç duymadığı veritabanlarına kadar uzanır. Web üzerinden dağıtılan bilgileri depolamak için ciddi bir DBMS kullanacaksanız, büyük olasılıkla veritabanı PHP tarafından desteklenmektedir. PHP'de veritabanı desteği, veritabanına bağlanmak, sorguları işlemek ve bağlantıyı kesmek için bir dizi standart işlevle temsil edilir.
Desteklenen tüm veritabanlarının ayrıntılı bir açıklaması bu kitabın kapsamı dışındadır. Ancak MySQL sunucusu, PHP'deki veritabanı desteğinin genel olanakları hakkında iyi bir fikir verir. Bu nedenle, bu kitabın geri kalan kısmındaki örneklerde ve kitabın diğer tüm bölümlerinde MySQL sözdizimi kullanılacaktır. Hangi veritabanı sunucusuyla çalışırsanız çalışın, örnekleri özelleştirmek kolaydır.
Kurulum
PHP kullanıcıları arasında MySQL'in popülaritesinin bir nedeni, bu sunucu desteğinin PHP'ye otomatik olarak dahil edilmesidir. Bu nedenle, MySQL veritabanının doğru kurulumunu izlemeniz yeterlidir, MySQL veritabanı FreeBSD, Solaris, UNIX, Linux ve çeşitli Windows sürümleri dahil olmak üzere neredeyse tüm büyük işletim sistemleriyle uyumludur. MySQL'in lisanslama politikası diğer veritabanı sunucularından daha esnek olmasına rağmen, MySQL web sitesindeki (http://www.mysql.com) lisans bilgilerini okumanızı şiddetle tavsiye ederim.
MySQL'in en son sürümü herhangi bir yansıtma sitesinden kabul edilebilir. Yansıtmalı sitelerin tam listesi http://www.mysql.com/downloads/mirrors.html adresinde mevcuttur. Yazma sırasında, MySQL'in en son kararlı sürümü 3.22.32'dir ve 3.32 sürümü beta testindedir. Tabii ki, her zaman en son kararlı sürümü yüklemelisiniz, bu sizin yararınızadır. En yakın "ayna" sitesini ziyaret edin ve işletim sisteminize uygun sürümü indirin. Sayfanın üst kısmında çeşitli platformlar için yeni sürümlere bağlantılar bulunur. Belirli bir işletim sistemi için bağlantılarla biten sayfanın tamamını okuduğunuzdan emin olun.
MySQL geliştirme ekibi, kurulum sürecini açıklayan ayrıntılı belgeler hazırlamıştır. Doğrudan işletim sisteminizle ilgili bilgilerle sınırlı değil, kurulumun tüm genel yönlerini dikkatlice incelemenizi tavsiye ederim.
MySQL kurulumu
Başarılı bir kurulumdan sonra MySQL sunucusunun yapılandırılması gerekir. Özelleştirme süreci temel olarak yeni veritabanları oluşturma ve düzenlemeden oluşur. tablolar ayrıcalıklar MySQL. Ayrıcalık tabloları, MySQL veritabanlarına erişimi kontrol eder. Uygun tablo kurulumu, veritabanlarınızın güvenliğinde son derece önemli bir rol oynar, bu nedenle siteyi üretim modunda başlatmadan önce ayrıcalık sistemini tam olarak anlamanız gerekir.
İlk bakışta, MySQL ayrıcalık tabloları göz korkutucu görünebilir, ancak bunları doğru bir şekilde anladığınızda, daha fazla bakım çok basit bir iş haline gelir. Ayrıcalık tablolarının tam açıklaması bu kitabın kapsamı dışındadır. Ancak, Web'de yeni MySQL kullanıcılarına yardımcı olmak için tasarlanmış birçok kaynak vardır. Daha fazla bilgi için MySQL web sitesine bakın (http://www.mysql.com).
MySQL paketini başarıyla kurduktan ve yapılandırdıktan sonra, Web'deki veritabanlarını denemeye başlayabilirsiniz! Bir sonraki bölüm bu konuya ayrılmıştır. PHP'deki MySQL desteğine bakarak başlayalım.
MySQL ile Çalışmak için PHP Standart İşlevleri
Böylece, gerekli tüm izinleri başarıyla oluşturdunuz ve test ettiniz; her şey MySQL sunucusuyla çalışmaya hazır. Bu bölümde, PHP betiklerinin MySQL sunucusuyla iletişim kurmasını kolaylaştıran standart PHP işlevlerini tanıtacağım. MySQL sunucusuyla etkileşime girerken genel eylem sırası şöyle görünür:
- MySQL sunucusuna bir bağlantı kurun. Deneme başarısız olursa, uygun bir mesaj görüntüleyin ve işlemi sonlandırın.
- MySQL sunucusu veritabanını seçin. Seçim girişimi başarısız olursa, uygun bir mesaj görüntüleyin ve işlemi sonlandırın. Sorguları işlemek için aynı anda birden fazla veritabanı açabilirsiniz.
- Seçilen veritabanına (veya veritabanlarına) yönelik istekleri işleyin.
- İstekler işlendiğinde veritabanı sunucusuyla olan bağlantıyı kapatın.
Bu bölümdeki örnekler, ürünler, müşteriler ve sipariş tablolarını kullanır (bkz. Şekil 11.1). Tüm örnekleri kendiniz test etmek istiyorsanız, bu tabloları oluşturun veya yapı sayfasını kopyalayın, böylece kitabı çevirmeye devam etmek zorunda kalmazsınız.
Öyleyse, en baştan başlayalım - yani, MySQL sunucusuna bağlanarak.
mysql_connect() işlevi MySQL sunucusuyla bağlantı kurar MySQL ile başarılı bir bağlantı kurduktan sonra, bu sunucu tarafından sunulan veritabanlarını seçmeye devam edebilirsiniz. mysql_connect() işlevinin sözdizimi şöyledir:
int mysql_connect ( [:/path//to/socket] [, string kullanıcı adı] [, string şifre])
Host parametresi, MySQL sunucusunun ayrıcalık tablolarında belirtilen ana bilgisayarın adı iletilir. Tabii ki, MySQL sunucusuna uzaktan bağlanabileceğiniz için istekleri MySQL çalıştıran web sunucusuna yönlendirmek için de kullanılır. Ana bilgisayar adıyla birlikte isteğe bağlı parametreler belirtilebilir - bağlantı noktası numarası ve soketin yolu (yerel ana bilgisayar için). Kullanıcı adı ve şifre parametreleri, MySQL ayrıcalık tablolarında belirtilen kullanıcı adı ve şifre ile eşleşmelidir. Hibe tabloları doğrulama olmadan bağlantıya izin verecek şekilde yapılandırılabildiğinden, tüm parametrelerin isteğe bağlı olduğunu unutmayın. Host parametresi belirtilmemişse, mysql_connect() yerel ana bilgisayara bağlanmaya çalışır.
MySQL'e bağlantı açma örneği:
@mysql_connect(" localhost", "web", "4tf9zzzf")
Bu örnekte localhost bilgisayar adı, web kullanıcı adı ve 4tf9zzzf paroladır. mysql_connect() çağrısından önceki @ işareti, başarısız bir bağlantı girişiminde gönderilen tüm hata mesajlarını bastırır -- bunlar die() çağrılırken belirtilen mesajla değiştirilir. rnysql_connect() çağrısından döndürülen değerin bu örnekte kullanılmadığına dikkat edin. Program MySQL sunucusuna yalnızca bir bağlantı kullanıyorsa, bu oldukça normaldir. Ancak, program farklı ana bilgisayarlarda birden çok MySQL sunucusuna bağlantı kurarsa, sonraki komutları doğru MySQL sunucusuna yönlendirmek için mysql_connect() çağrısı tarafından döndürülen bağlantı kimliği saklanmalıdır. Örnek:
$link1 = @mysql_connect("www.somehost.com", "web", "abcde") or die("Şuraya bağlanılamadı
MySQL sunucusu!");
$linkl = @mysql_connect("www.someotherhost.com", "usr", "gizli") or die("Bağlanamadı
MySQL sunucusuna!");
$link1 ve $link2 tanımlayıcıları, sonraki sorgularda veritabanlarına iletilir. Yakında bir bağlantı tanımlayıcısı kullanarak bir isteği doğru sunucuya nasıl yönlendireceğinizi öğreneceksiniz.
mysql_pconnect() işlevi, kalıcı bağlantılar için destek sağlar. Çok kullanıcılı ortamlarda, sistem kaynaklarını korumak için mysql_connect() yerine mysql_pconnect() kullanılması önerilir. mysql_pconnect() işlevinin parametre türleri ve dönüş değeri tamamen aynıdır. c mysql_connect().
mysql_select_db()
MySQL'e başarılı bir bağlantıdan sonra, sunucuda bulunan bir veritabanı seçmeniz gerekir. Bunun için mysql_select_db() işlevi kullanılır. mysql_select_db() işlevinin sözdizimi şöyledir:
int mysql_select_db (sicim veri tabanı ismi [, int bağlantı_kimliği])
veritabanı_adı parametresi, seçilen veritabanını, tanımlayıcıyı tanımlar.
mysql_select_db() işlevi tarafından döndürülür. Lütfen dikkat: parametre
connection_id yalnızca bir açık bağlantı için isteğe bağlıdır
MySQL sunucusu. Birden fazla açık bağlantı varsa, bu seçenek
belirtilmelidir. mysql_select_db() işleviyle bir veritabanı seçme örneği:
or die("MySQL sunucusuna bağlanılamadı!");
Programda yalnızca bir veritabanı seçilmişse, kimliğini kaydetmeye gerek yoktur. Ancak, birden çok veritabanı seçildiğinde, isteği işlerken doğru veritabanına başvurabilmeniz için döndürülen kimlikler korunur. Tanımlayıcı belirtilmezse, en son seçilen veritabanı kullanılır.
MySQL sunucusuyla çalışmayı bitirdikten sonra bağlantı kapatılmalıdır. mysql_close() işlevi, isteğe bağlı bir parametre tarafından belirtilen bağlantıyı kapatır. Parametre ayarlanmazsa, mysql_close() işlevi son açık bağlantıyı kapatır. mysql_close() işlevinin sözdizimi şöyledir:
int mysql_close()
mysql_close() kullanımına bir örnek:
@mysql_connect("localhost", "web", "4tf9zzzf")
or die("MySQL sunucusuna bağlanılamadı!");
@mysql_select_db("şirket") or die("Şirket veritabanı seçilemedi!"); print "Bir MySQL veritabanına bağlısınız!";
Bu örnekte, mysql_close() çağrıldığında sunucuya yalnızca bir açık bağlantı olduğundan, bir bağlantı kimliği belirtmeniz gerekmez.
mysql_pconnect() tarafından açılan bağlantıların kapatılması gerekmez.
mysql_query() işlevi, veritabanlarını sorgulamak için bir arabirim sağlar.
veri. mysql_query() işlevinin sözdizimi şöyledir:
int mysql_query (dize sorgusu [, int bağlantı_kimliği])
Sorgu parametresi, SQL'deki sorgu metnini içerir. İstek, isteğe bağlı bağlantı_kimliği parametresi tarafından belirtilen bağlantıya veya bir parametrenin yokluğunda son açık bağlantıya iletilir.
Deneyimsiz programcılar sıklıkla yanlışlıkla mysql_query() işlevinin bir sorgu işlemenin sonuçlarını döndürdüğünü düşünürler. Bu doğru değil - sorgunun türüne bağlı olarak, mysql_query() işlevini çağırmak farklı sonuçlara yol açabilir. SQL SELECT komutunun başarıyla tamamlanmasının ardından, daha sonra sorgu sonuçlarının biçimlendirilmesi ve görüntülenmesi için mysql_result() işlevine iletilen bir sonuç tanımlayıcısı döndürülür. İstek işleme başarısız olursa, işlev FALSE döndürür. mysql_result() işlevi aşağıdaki bölümlerden birinde açıklanmıştır. Bir sorguda yer alan kayıt sayısı, mysql_num_rows() işlevi kullanılarak belirlenir. Bu fonksiyon ayrıca aşağıda açıklanmıştır.
Bununla birlikte mysql_query() örneklerini sadece mysql_result() ve mysql_affected_rows() fonksiyonlarını tanımladıktan sonra vereceğim.
Sorguları işlerken çok fazla bellek tüketilmesinden endişe ediyorsanız, standart PHP mysql_free_result işlevini çağırın. Çağrıldığında, mysql_query() tarafından döndürülen sonuç tanımlayıcısı iletilir. mysql_free_result() işlevi, verilen sorguyla ilişkili tüm belleği boşaltır.
mysqlaffed_rows()
Çoğu durumda, INSERT, UPDATE, REPLACE veya DELETE komutlarıyla bir SQL sorgusunda yer alan kayıtların sayısını bilmek istersiniz. Sorun, mysql_affected_rows() işleviyle çözülür. İşlev sözdizimi:
int mysql_affected_rows()
Connection_id parametresinin isteğe bağlı olduğunu unutmayın. Belirtilmezse, mysql_affected_rqws() son açık bağlantıyı kullanmaya çalışır. Örnek:
// Sunucuya bağlanın ve veritabanını seçin
@mysql_connect("localhost", "web". "4tf9zzzf")
or die("MySQL sunucusuna bağlanılamadı!");
@mysql_select_db("şirket") or die("Şirket veritabanı seçilemedi!");
// Bir istek oluştur
$query = "Ürünleri GÜNCELLE SET prod_name = \"kavun\"
WHERE prod_id = \"10001pr\";
// İsteği yürüt
// Güncellenen kayıtların sayısını belirle
print "Toplam satır güncellendi; ".mysql_affected_rows();
Bu parçacığı çalıştırmak aşağıdaki çıktıyı üretecektir:
Toplam satır güncellendi: 1
mysql_affected_rows() işlevi, SELECT deyimine dayalı sorgularla çalışmaz. Sonraki bölümde açıklanan mysql_num_rows() işlevi, bir SELECT çağrısı tarafından döndürülen satır sayısını belirlemek için kullanılır.
Belirli bir durumda, mysql_affected_rows() işlevi başarısız olur. WHERE yan tümcesi olmadan bir DELETE komutu yürütülürken, mysql_affected_rows() her zaman 0 döndürür.
mysql_num_rows()
mysql_num_rows() işlevi, SELECT komutu tarafından döndürülen satır sayısını belirler. mysql_num_rows() işlevinin sözdizimi:
int mysql_num_rows(int sonuç)
mysql_num_rows() kullanan bir örnek:
// Sunucuya bağlanın ve @mysql_connect("localhost", "web", "4tf9zzzf") veritabanını seçin
or die("MySQL sunucusuna bağlanılamadı!");
@mysql_select_db("şirket") or die("Şirket veritabanı seçilemedi!");
// İsimleri "p" ile başlayan tüm ürünleri seçin
$query = "prod_name GİBİ \"p*\" OLDUĞU ÜRÜNLERDEN prod_name SEÇİN";
print "Seçilen toplam satır sayısı: ".mysql_num_rows($result);
Tablo adı p (armut) ile başlayan tek bir ürün içerdiğinden, yalnızca bir kayıt döndürülür. Sonuç:
Seçilen toplam satır sayısı: 1
mysql_result() işlevi, bir veri kümesini almak için mysql_query() ile birlikte (SELECT komutuyla bir sorgu yürütülürken) kullanılır. mysql_resu1t() işlevinin sözdizimi:
int mysql_result(int sonuç_kimliği, int kaydı [.karışık alan"]")
Sonuç_kimliği parametresi, mysql_query() işlevi tarafından döndürülen değerdir. Kayıt parametresi, sonuç_kimliği tarafından tanımlanan veri kümesindeki belirli bir kaydı ifade eder. Son olarak, isteğe bağlı bir parametrede bir alan iletilebilir:
- tablodaki alan ofseti;
- alan adı;
- biçiminde alan adı alan_adı_tdblitz_adı.
Liste 11.1, Şekil 11.1'de gösterilen veritabanını kullanır. 11.1.
Liste 11.1. MySQL veritabanındaki verileri seçme ve biçimlendirme
@mysql_connect("localhost", "web", "ffttss")
or die("MySQL sunucusuna bağlanılamadı!");
@mysql_select_db("şirket")
// Ürünler tablosundan tüm kayıtları seçin
$query = "Ürünlerden * SEÇİN"; $sonuç = mysql_query($sorgu);
Yazdır"
ürün kimliği | Ürün adı | ürün fiyatı | \n
---|---|---|
$kimlik | \n$isim | \n$fiyat | \n";
Bu örneğin Şekil 2'de gösterilen verilerle çalıştırılmasının bir sonucu olarak. 11.1, aşağıdaki sonuç elde edilecektir:
Liste 11.2. Liste 11.1'in Sonucu
mysql_result() işlevi, nispeten küçük veri kümeleriyle uğraşmak için kullanışlıdır, ancak çok daha verimli olan başka işlevler de vardır, yani mysql_fetch_row() ve mysql_fetch_array() işlevleri. Bu özellikler aşağıdaki bölümlerde açıklanmıştır.
mysql_fetch_row()
Bir kaydın tüm alanlarının değerlerini, tek tek alanları almak için art arda mysql_result() öğesini çağırmak yerine, dizinlenmiş bir dizinin (0 dizininden başlayarak) öğelerine hemen atamak genellikle çok daha uygundur. Görev, aşağıdaki sözdizimine sahip mysql_fetch_row() işlevi tarafından çözülür:
dizi mysql_fetch_row(int sonuç)
list() işlevinin mysql_fetch_row() ile birlikte kullanılması, mysql_result() kullanılırken ihtiyaç duyulan birkaç komutu kaydeder. Liste 11.3, List() ve mysql_fetch_row() kullanılarak yeniden yazılan Liste 11.1'deki kodu gösterir.
Liste 11.3. mysql_fetch_row() ile veri getirme
@mysql_connect("localhost", "web", "ffttss") or die("MySQL sunucusuna bağlanılamadı!");
@mysql_select_db("şirket") or die("Ürün veritabanı seçilemedi!");
$query = "Ürünlerden * SEÇİN";
$sonuç = mysql_query($sorgu);
Yazdır"
ürün kimliği | Ürün adı |
ürün fiyatı | \n
---|---|---|
".$satır["prod_id"]." | \n".$satır["ürün_adı"]." | \n" .$satır["ürün_fiyatı"]. " | \n";
Liste 11.3, Liste 11.1 ile aynı sonucu verir, ancak daha az komut kullanır.
benim kare l_f etch_array()
mysql_fetch_array() işlevi mysql_fetch_row() işlevine benzer, ancak varsayılan olarak kayıt alanlarının değerleri ilişkisel dizi. Ancak, indeksleme türünü (ilişkisel, sayısal veya birleşik) seçebilirsiniz. mysql_fetch_array() işlevinin sözdizimi:
dizi mysql_fetch_array (int sonuç kimliği [, index_type])
Sonuç_kimliği parametresi, mysql_query() işlevi tarafından döndürülen değerdir. İsteğe bağlı parametre index_type aşağıdaki değerlerden birini alır:
- MYSQL_ASSOC -- mysql_fetch_array() işlevi, ilişkisel bir dizi döndürür. Parametre belirtilmezse, varsayılan olarak bu değer kullanılır;
- MYSQL_NUM -- mysql_fetch_array() sayısal olarak indekslenmiş bir dizi döndürür;
- MYSQL_BOTH -- Döndürülen kaydın alanlarına hem sayısal hem de ilişkisel dizinlerle erişilebilir.
Liste 11.4, Liste 11.1 ve 11.3'teki kodun başka bir sürümünü içerir. Bu sefer, ilişkili bir alan dizisi döndüren mysql_fetch_array() işlevi kullanılır.
Liste 11.4. mysql_fetch_array() ile veri getirme
@mysql_connect("localhost", "web", "ffttss")
or die("MySQL sunucusuna bağlanılamadı!");
@mysql_select_db("şirket")
or die("Ürün veritabanı seçilemedi!");
$query = "Ürünlerden * SEÇİN";
$sonuç = mysql_query($sorgu);
"
ürün kimliği | Ürün adı | ürün fiyatı | \n
---|---|---|
".$satır["prod_id"]." | \n".$satır["ürün_adı"]." | \n" .$satır["ürün_fiyatı"] . " | \n" ;
Liste 11.4, Liste 11.1 ve 11.3 ile aynı sonucu verir.
PHP'de MySQL'in işlevselliği hakkında şimdi bildikleriniz, bazı oldukça ilginç uygulamalar oluşturmaya başlamak için yeterli. Bakacağımız ilk uygulama basit bir arama motorudur. Bu örnek, daha sonra bir veritabanından bilgi almak için kullanılan verileri almak için HTML formlarının kullanımını gösterir (önceki bölüme bakın).
PHP'de basit bir arama motoru örneği
Hepimiz Web'de arama motorlarını bir kereden fazla kullandık, ancak arama motorları nasıl çalışır? En basit arama motoru en az bir anahtar kelime kabul eder. Bu kelime, daha sonra veritabanından bilgi almak için kullanılan SQL sorgusuna dahil edilir. Arama sonucu, arama motoru tarafından bir veya başka bir kritere göre biçimlendirilir (örneğin, kategoriye veya eşleşme derecesine göre).
Liste 11.5'te gösterilen arama motoru, müşteriler hakkında bilgi bulmak içindir. Formda, kullanıcı bir anahtar kelime girer ve aranacak bir kategori (müşterinin adı, kimliği veya e-posta adresi) seçer. Kullanıcı tarafından girilen ad, tanımlayıcı veya adres varsa, arama motoru özniteliklerin geri kalanını veritabanından alır. Daha sonra siparişler tablosundan alıcının kimliğine göre seçilir.
satın alım geçmişi. Bu müşteri tarafından verilen tüm siparişler, azalan hacim sırasına göre görüntülenir. Belirtilen anahtar kelime, kullanıcı tarafından belirtilen kategoride bulunmazsa, arama durur, program uygun bir mesaj görüntüler ve formu tekrar görüntüler.
Liste 11.5. En basit arama motoru (searchengine.php)
"
Altın Numaralar Güzel bir telefon numarası nasıl satılır
Kripto para madenciliği: basit kelimelerle nedir
En iyi dizüstü bilgisayar işletim sistemi: Eksiksiz inceleme
Sınıf arkadaşlarından müzik indirmek için programlar Sosyal ağ sınıf arkadaşlarından üzücü bir şarkı indirin
Yandex tarayıcısının mobil versiyonu