php veritabanı bağlantısı. MySQL veritabanları ile iletişim. Veritabanı oluşturma. VERİTABANI OLUŞTUR işlevi

  • 03.11.2019

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:

  1. daha uygun;
  2. 40 kata kadar daha hızlı;
  3. yükseltilmiş güvenlik;
  4. 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şitTanım
GEÇERSİZ DEĞİLTü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 ANAHTARSütun, tablonun birincil anahtarıdır. Bu sütundaki veriler benzersiz olmalıdır. MySQL bu sütunu otomatik olarak indeksler
İMZASIZTamsayı türünden sonra, değerinin pozitif veya boş olabileceği anlamına gelir.
YORUMTablo 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

Bir tabloya girdi ekleme

Ö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

Yeni kitaplar eklemek için HTML formu
ISBN'si
Yazar
İsim
Fiyat
Miktar


Bu formu doldurmanın sonuçları insert_book.php dosyasına aktarılır.

Örnek 2.2

Yeni kitap ekleme programı (dosya insert_book.php) Lütfen geri dönün ve yazmayı bitirin"); ) $isbn = trim ($_POST["isbn"]); $author = trim ($_POST["author"]); $title = trim ($_POST["title" ] ) ; $isbn = lashes ($isbn); $yazar = lashes ($yazar); $title = lashes ($title) ; $db = "sample"; $link = mysql_connect(); if (!$link) die ("MySQL'e bağlanılamıyor"); mysql_select_db ($db) or die ("$db açılamıyor"); $query = "Kitap DEĞERLERİNE GİRİN ("" .$isbn."", "".$author . "", "".$title."", "" .floatval($_POST["fiyat"])."", "".intval($_POST["miktar"])."")"; $ sonuç = mysql_query ($query); if ($result) echo "Kitap veritabanına eklendi."; mysql_close ($link); ?>

Ö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

Kitap Arama HTML Formu
Arıyor:

Ne arıyoruz:



Bu formun sonuçları search_book.php'ye iletilir.

Örnek 3.2

Lütfen geri dönün ve yazmayı bitirin"); $searchterm =addslashes($searchterm); $link = mysql_pconnect(); if (!$link) die("MySQL'e bağlanılamıyor"); $db = "sample"; mysql_select_db ($db) or die ("$db açılamıyor"); $query = "SELECT * FROM NEREDE " .$_POST["arama türü"]." "%".$searchterm."%"" gibi; $result = mysql_query ($query); $n = mysql_num_rows ($result); for ($i=0; $i)<$n; $i++) { $row = mysql_fetch_array($result); echo "

".($i+1). $satır["başlık"]. "



"; ) if ($n == 0) echo "Sunacak bir şeyimiz yok. Üzgünüm"; mysql_close($link); ?>

Alternatif seçenek

Kitap arama programı (search_book.php dosyası) 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"]."

"; ) if ($i == 1) echo "Sunacak bir şeyimiz yok. Özür dilerim"; mysql_close(); ?>

Peki Web veritabanı mimarisi nasıl çalışır:

  1. 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.
  2. Web sunucusu search_book.php için bir istek alır, bu dosyayı alır ve işlenmek üzere PHP motoruna iletir.
  3. PHP, MySQL sunucusuna bağlanır ve isteği gönderir.
  4. Sunucu bir veritabanı isteği alır, onu işler ve sonucu (kitapların bir listesi) PHP motoruna geri gönderir.
  5. 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.
  6. 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).

Kullanıcı kayıt formu add.php

E-posta:

Şifre:



Veritabanına giriş ve şifre add1.php giriyoruz

İçeri gel

Kayıtlı.

Şimdi login ve password giriş formu login.php

PHP'de Olay Hatırlatıcı

E-posta:

Şifre:

Kayıt

Şifreyi hatırlat

Kullanıcı adı ve şifreyi doğru girdikten sonra olayların listesini ekrana getiriyoruz see.php

PHP'de Olay Hatırlatıcı
"; ) 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 " "; Eko " "; Eko " "; Eko " "; Eko " "; Eko "
"; Eko "
"; ) /* Yeni bir olay girmek için bir form çizin */ echo "

Etkinlik:

"; echo "Etkinlik açıklaması:

Ne zaman olacak:
"; Eko "

"; Eko "

"; Eko "

"; ) /* Bağlantıyı kapat */ mysql_close(); ?>

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.

PHP'de Olay Hatırlatıcı
"; ) 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."; ?>


"; /* 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 " "; Eko " "; Eko " "; Eko " "; Eko " "; Eko "
"; Eko "
"; ) Eko "

Etkinlik:

"; echo "Etkinlik açıklaması:

Ne zaman olacak:
"; Eko "

"; Eko "

"; ) /* Bağlantıyı kapat */ mysql_close(); ?>

Tabloda Değiştir düğmesi, daha önce girilen girişi değiştirme formuyla change.php'yi açar.

PHP'de Olay Hatırlatıcı
"; ) başka ( yankı "

"; Eko "

"; Eko "

"; Eko "

"; Eko " "; Eko " "; Eko "

PHP'de Olay Hatırlatıcı
"; ) else ( /* Verilerin depolandığı MySQL tablosu */ /* bağlantı oluştur */ mysql_connect($hostname,$username,$password) VEYA DIE("Can't create connection "); /* veritabanı seç. bir hata oluşursa, çıktısını alın */ mysql_select_db($dbName) or 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); /* Verilerin depolandığı MySQL tablosu */ $userstable = "sobbit"; /* bağlantı oluştur */ mysql_connect($hostname,$username,$password) VEYA DIE("Bağlantı oluşturulamıyor "); /* bir veritabanı seçin. Bir hata oluşursa, onu görüntüleyin */ mysql_select_db($dbName) veya die(mysql_error()); /* tablodaki bilgileri değiştirmek için bir sorgu oluşturun */ $query = "UPDATE $ usertable SET sobit ="".$asobit."",opsobit="".$aopsobit."",kogda="".$akogda."" WHERE nn=$ann"; /* Sorguyu çalıştırın. Bir hata varsa oluşursa çıktısını alın. */ mysql_query($query ) veya die(mysql_error()); echo "Olay bilgileri değişti."; ?>


"; /* 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 NEREDE usver = "".$name."" "; //$query = "SELECT * FROM $userstable"; $res = mysql_query($query) ) veya die(mysql_error()); while ($row=mysql_fetch_array($res)) ( echo $row["sobit"]." ".$row["opsobit"]." ".$row["kogda" ] ; yankı " "; Eko " "; Eko " "; Eko " "; Eko " "; Eko " "; Eko "

"; Eko "
"; ) Eko "

Etkinlik:

"; echo "Etkinlik açıklaması:
"; Eko "

Olduğu zaman:

"; Eko "

"; ) /* Bağlantıyı kapat */ mysql_close(); ?>

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.

PHP'de Olay Hatırlatıcı ".$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.

PHP etkinlik hatırlatıcısı /başlık> <meta https-equiv=”Content-Type” content=”text/html; charset=windows-1251?> <body> <P> <center> <TABLE WIDTH = 400><TR><TD align = right> <FORM ACTION="forgot1.php" METHOD="POST">E-posta: <BR> <INPUT TYPE="text" NAME="name" SIZE="30" MAXLENGTH="240"> <P> <INPUT TYPE="submit" VALUE="göndermek"> </FORM> </TD></TR></TABLE></CENTER> </center> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html> </p><p>"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.</p><p> <html> <head> <title>PHP'de Olay Hatırlatıcı
"; ) 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ı
-- veri depolamada kullanılan yapıların tanımı;
  • veri örneklemesi
  • -- veri tabanından veri yükleme ve çıktı için uygun bir formatta sunma;
  • veri işleme
  • -- bilgileri ekleme, güncelleme ve silme;
  • giriş kontrolu
  • -- bireysel kullanıcılar düzeyinde örnekleme, veri ekleme, güncelleme ve silmeyi etkinleştirme/devre dışı bırakma yeteneği;
  • veri bütünlüğü kontrolü
  • -- Eşzamanlı güncellemeler veya sistem çökmeleri gibi sorunlar oluştuğunda veri yapısını koruyun.

    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:

    1. 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.
    2. 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.
    3. Seçilen veritabanına (veya veritabanlarına) yönelik istekleri işleyin.
    4. İ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"

    \n";

    Yazdır"

    \n \n\n";

    süre ($x< mysql_numrows($result)) :

    $id = mysql_result($sonuç. $x. "prod_id");

    $isim = mysql_result($sonuç, $x, "prod_name");

    $fiyat = mysql_result($sonuç. $x, "ürün_fiyat");

    Yazdır"

    \n";

    Yazdır"

    \n \n \n";

    Yazdır"

    \n";

    Yazdır"

    ürün kimliğiÜrün adıürün fiyatı
    $kimlik$isim$fiyat
    ";

    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

    ürün kimliğiÜrün adıürün fiyatı

    1000pr

    elmalar

    1.23

    1001pr

    portakallar

    2.34

    1002pr

    muz

    3.45

    1003pr

    armutlar

    4.45

    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"

    \n";

    Yazdır"

    \n \n\n";

    while ($row = mysql_fetch_array($result)) :

    Yazdır"

    \n":

    Yazdır"

    \n \n \n";

    Yazdır"

    \n";

    Yazdır"

    ürün kimliğiÜrün adı

    ürün fiyatı

    ".$satır["prod_id"]."".$satır["ürün_adı"]."

    " .$satır["ürün_fiyatı"]. "
    ";

    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);

    "

    \n";

    Yazdır"

    \n \n\n";

    Yazdır"

    \n";

    Yazdır"

    \n \n \n" ;

    Yazdır"

    \n";

    Yazdır"

    ürün kimliğiÜrün adı ürün fiyatı
    ".$satır["prod_id"]."".$satır["ürün_adı"]."" .$satır["ürün_fiyatı"] . "
    ";

    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)

    "

    Anahtar Kelimeler:


    Arama Odağı:


    ,

    // Form henüz görüntülenmediyse - göster

    if (Sseenform != "y") :

    $formu yazdır; başka:

    @mysql_connect("localhost", "web", "ffttss")

    or die("MySQL sunucusuna bağlanılamadı!");

    @mysql_select_db("şirket")

    // Sorguyu oluştur ve çalıştır

    $query = " cust_id seçin. cust_name, cust_email

    MÜŞTERİLERDEN $category = "$keyword"";

    $sonuç = mysql_query($sorgu);

    // Eşleşme bulunamazsa, bir mesaj görüntüleyin

    // ve formu yeniden oluştur

    if (mysql_num_rows($result) == 0) :

    print "Üzgünüz, ancak eşleşme bulunamadı. Lütfen aramanızı tekrar deneyin:";

    // Eşleşmeler bulundu. Format ve çıktı sonuçları, aksi halde:

    // Alan değerlerini biçimlendirin ve görüntüleyin.

    list($id, $ad, $e-posta) = mysql_fetch_row($sonuç);

    Yazdır"

    Müşteri Bilgileri:

    ";

    Yazdır" İsim:$isim
    ";

    Yazdır" Kimlik#:$kimlik
    ";

    Yazdır" E-posta: $e-posta
    ";

    Yazdır"

    Sipariş Geçmişi:

    ";

    // "Siparişler" tablosuna karşı bir sorgu oluşturun ve yürütün

    $query = "order_id, prod_id, miktar SEÇ

    FROM siparişler WHERE cust_id = "$id"

    Miktara GÖRE SİPARİŞ DESC";

    $sonuç = mysql_query($sorgu):

    Yazdır"

    ";

    Yazdır"

    ";

    // Bulunan kayıtları biçimlendirin ve görüntüleyin.

    while (list($order_id, $prod_id, $miktar) = mysql_fetch_row($sonuç));

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    0 sipariş kimliğiürün kimliğiMiktar
    $order_id$prod_id$ miktar
    ";

    Mi 1 apo anahtar sözcüğünü girer ve açılır listeden Müşteri Adı kategorisini seçerseniz, program aşağıdaki bilgileri görüntüler:

    Müşteri Bilgileri:

    İsim: Milano

    Kimlik#: 2000cu

    E-posta:

    Sipariş Kimliği ürün kimliği Miktar
    100003 1000pr 12
    100005 1002pr 11

    Tabii ki, bir arama motorunun en basit uygulamasını düşündük. Birkaç ek özellik vardır - birden fazla anahtar kelime arama, eksik anahtar kelimeler arama veya benzer anahtar kelimelerle kayıtları otomatik olarak getirme. Yaratıcı hayal gücünüzü kullanmaya çalışın ve bunları kendiniz gerçekleştirin.

    Tablo sıralama

    Veritabanından veri çekerken, çeşitli kriterlere göre sıralama imkanı sağlamak gerekir. Örnek olarak, arama motorumuz tarafından görüntülenen sonuçları düşünün - Sipariş Geçmişi başlığından sonra aşağıdakilere özellikle dikkat edin: (Siparişlerin geçmişi). Diyelim ki liste çok uzun ve verileri ürün kimliğine (veya sipariş kimliğine) göre sıralamak istiyorsunuz. Neyin tehlikede olduğunu daha iyi anlamak için en sevdiğim sitelerden birini ziyaret etmenizi öneririm, http://download.cnet.com. Belirli bir kategorideki programlara göz atarken bir sütun başlığına (ad, gönderi tarihi, indirme sayısı veya dosya boyutu) tıklarsanız, liste otomatik olarak o sütunun içeriğine göre sıralanır. Aşağıda bu özelliğin nasıl uygulanacağı gösterilmektedir.

    Liste 11.6'da siparişler tablosundan veri alıyoruz. Varsayılan olarak, veriler, sipariş hacmine (miktar alanı) göre azalan düzende sıralanır. Ancak, herhangi bir tablo başlığına tıklamak, sayfanın belirtilen sütuna göre sıralanan tabloyla yeniden yüklenmesine neden olur.

    Liste 11.6. Tablo sıralama (tablesorter.php)

    // MySQL sunucusuna bağlanın ve veritabanını seçin

    @mysql_connect("localhost". "web", "ffttss")

    or die("MySQL sunucusuna bağlanılamadı!");

    @mysql_select_db("şirket")

    or die("Şirket veritabanı seçilemedi!");

    // $key değişkeninin değeri ayarlanmazsa, varsayılan

    // "quantity" değerini kullan if (! isset($key)) :

    $anahtar = "miktar"; endif;

    // İsteği oluştur ve çalıştır.

    // Seçilen veriler, azalan düzende $key sütununa göre sıralanır

    $query = "order_id, cust_id, prod_id, SİPARİŞLERDEN $key DESC TARAFINDAN SİPARİŞ SEÇ" $sonuç = mysql_query($query);

    // Tablo başlığı oluştur

    Yazdır"

    ";

    Yazdır"

    ";

    // Her tablo satırını biçimlendirin ve çıktısını alın

    while (list($order_id,$cust_id,$prod_id, $miktar)

    mysql_fetch_row($sonuç)) :

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    ";

    // Son masa

    Yazdır"

    Sipariş Kimliği Müşteri Kimliği ürün kimliği Miktar

    $order_id$cust_id$prod_id

    $ miktar

    ";

    Şekilde gösterilen şirket veritabanı için. 11.1, 11.6 listesinin standart çıktısı şöyle görünür:

    Sipariş Kimliği Müşteri Kimliği ürün kimliği Miktar
    2000cu 1000pr 12
    2000cu 1002pr 11
    2000cu 1000pr 9
    2000cu 1001pr 5
    2000cu 1002pr 3

    Tablo başlıklarının köprüler olduğunu unutmayın. Varsayılan sıralama miktar alanına göre yapıldığından, kayıtlar son sütuna göre azalan düzende sıralanır. Order_ID bağlantısına tıklarsanız sayfa yeniden yüklenir, ancak bu sefer kayıtlar azalan düzende order ID'ye göre sıralanır. Tablo şöyle görünecek:

    Sipariş Kimliği Müşteri Kimliği ürün kimliği Miktar
    2000cu 1002pr 11
    2000cu 1000pr 9
    2000cu 1000pr 12
    2000cu 1001pr 5
    2000cu 1002pr 3

    Veritabanlarını biçimlendirirken çıktıları sıralamak büyük fayda sağlar. SELECT sorgusunun basit bir modifikasyonu, verileri herhangi bir ölçüte göre sıralamanıza olanak tanır - artan, azalan veya kayıtları gruplandırma.

    Bu, MySQL'e girişimizi tamamlıyor. Bu bölümün kesinlikle MySQL hakkında bilmeniz gereken her şeyi içermediğini unutmayın. PHP'deki MySQL komutlarının tam listesi için belgelere bakın (http://www.php.net/manuat).

    ODBC

    Özelleştirilmiş işlevler, belirli bir DBMS türüyle çalışmak için çok uygundur. Peki ya aynı uygulamada MySQL, Microsoft SQL Server ve IBM DB2'ye bağlanmanız gerekiyorsa? Bir DBMS'ye bağlı olmaması gereken uygulamalar geliştirirken de benzer bir sorun ortaya çıkar; bu tür uygulamalar, mevcut istemci veritabanı altyapısının "üstünde" çalışır. ODBC ("Açık Veritabanı Bağlantısı", yani "açık veritabanı mimarisi"nin kısaltması), farklı veritabanları türleriyle çalışmak için ortak bir soyut işlevler kümesi kullanmanıza olanak tanıyan bir uygulama programı arabirimidir (API). Bu yaklaşımın avantajları açıktır - aynı işlemleri farklı veritabanlarıyla gerçekleştirmek için aynı kod parçasını tekrar tekrar yazmanız gerekmez.

    ODBC aracılığıyla bir veritabanı sunucusuyla çalışmak, yalnızca bu sunucu ODBC uyumluysa mümkündür. Başka bir deyişle, bunun için ODBC sürücüleri mevcut olmalıdır. ODBC sürücüleri hakkında daha fazla bilgi için DBMS belgelerine bakın. Bunları ayrıca İnternet'ten indirmeniz ve bilgisayarınıza yüklemeniz gerekebilir. Microsoft tarafından geliştirilen ODBC standardı açık bir standart haline gelmesine rağmen, çoğunlukla Windows platformunda DBMS ile çalışmak için kullanılır; ancak ODBC sürücüleri Linux platformunda da mevcuttur. Aşağıda bazı popüler DBMS için sürücülere bağlantılar bulunmaktadır.

    • Windows 95/98/NT için veritabanı sürücüleri: http://www.microsoft.com/data/odbc
    • Otomasyon Teknolojileri: http://www.odbcsdk.com
    • Easysoft: http://www.easysoft.com/products/oob/main.phtml
    • MySQL ODBC Sürücüleri (MyODBC): http://www.mysql.com
    • OpenLinkYazılımı: http://www.openlinksw.com

    ODBC sürücüleri amaç, platform ve amaç bakımından farklılık gösterir. Bu sürücülerle çalışmanın çeşitli yönleri hakkında bilgi için belirli paketlerin belgelerine bakın. Ancak, tüm farklılıklara rağmen, bu sürücülerin PHP'de kullanımı sorunsuzdur.

    Hangi ODBC sürücü paketinin ihtiyaçlarınıza en uygun olduğunu belirledikten sonra, indirin ve tüm kurulum ve yapılandırma talimatlarını izleyin. Bundan sonra, bir sonraki bölüme geçebilirsiniz - "PHP'de ODBC Desteği".

    PHP ODBC desteği

    PHP'de ODBC işlevleri, yaygın olarak şu şekilde adlandırılır: ortak ODBC işlevleri, yalnızca standart ODBC desteği sağlamakla kalmaz, aynı zamanda standart ODBC API aracılığıyla kendi API'leri olan bazı DBMS'lerle çalışmanıza da olanak tanır. İkincisi aşağıdaki DBMS'yi içerir:

    • Adabaş D;
    • IODBC;
    • IBM DB2;
    • sağlam;
    • Sybase SQL Her Yerde.

    Lütfen listelenen DBMS ile çalışırken standart ODBC mekanizmasının gerçekten kullanılmadığını unutmayın. PHP'de desteklenen yalnızca yaygın ODBC işlevleri, veritabanlarıyla etkileşim kurmak için kullanılır. Bu kullanışlıdır, çünkü başka bir ODBC uyumlu DBMS'ye (veya yukarıdaki listeden bir DBMS'ye) geçerseniz, tüm komut dosyalarınız düzgün çalışır.

    ODBC desteği PHP'de yerleşiktir, bu nedenle birkaç istisna dışında çok fazla özel yapılandırma yapmanız gerekmez.

    Şu anda yaklaşık 40 ortak ODBC işlevi vardır. Ancak, ODBC uyumlu bir veri tabanından bilgi almak için aşağıda açıklanan işlevlerden birkaçı oldukça yeterlidir. PHP'deki yaygın ODBC işlevlerinin tam listesi için belgelere bakın (http://www.php.net/manual).

    ODBC uyumlu bir veritabanını sorgulayabilmeniz için önce onunla bir bağlantı kurmanız gerekir. Bağlantı, ocbc_connect() işlevi tarafından oluşturulur. odbc_connect() işlevinin sözdizimi:

    int odbc_connect (dize veri kaynağı, dize kullanıcı adı, dize parolası [, int imleç türü])

    datasource parametresi, iletişim kurmaya çalıştığınız ODBC uyumlu veritabanını belirtir. Kullanıcı adı ve parola parametreleri, tahmin edebileceğiniz gibi, veri kaynağına bağlanmak için gereken kullanıcı adını ve parolayı iletir. İsteğe bağlı imleç_tipi parametresi, bazı ODBC sürücüleriyle çalışırken ortaya çıkan sorunları çözmeyi amaçlar.Dört olası değerden birini alabilir:

    • SQL_CUR_USE_IF_NEEDED;
    • SQL_CURSOR_USE_ODBC;
    • SQL_CUR_USE_DRIVER;
    • SQL CUR VARSAYILAN.

    Bu seçeneği kullanmanız gerekmeyebilir, ancak ODBC paketinizin belirli bir isteği karşılayamaması durumunda yine de akılda tutulması gereken bir şey.

    Bir programda odbc_connect() kullanmak kolaydır. Örnek:

    İşlev, kalıcı veritabanı bağlantılarını açmak için kullanılır. odbc_pconnect(), bağlantının daha önce açılıp açılmadığını kontrol ettiği ve açılmışsa önceki bağlantıyı kullandığı için sistem kaynaklarından tasarruf sağlar.

    ODBC uyumlu bir veritabanıyla çalışmayı bitirdikten sonra, açık bağlantı tarafından kullanılan tüm kaynakları serbest bırakmak için bağlantı kapatılmalıdır. Bağlantı, odbc_close() işleviyle kapatılır:

    geçersiz odbc_close()

    Connection_id parametresinde, açık bağlantının tanımlayıcısı iletilir. Küçük bir örnek düşünün:

    obdc_connect("myAccessDB", "kullanıcı", "gizli")

    or die("ODBC veritabanına bağlanılamadı");

    print "Şu anda ODBC veritabanına bağlı!"; odbc_close($bağlan);

    Doğrudan işlemeden önce, talep “hazırlanmalıdır”. Görev, odbc_prepare() işlevi tarafından çözülür:

    int odbc_prepare (int bağlantı_kimliği, dize sorgusu)

    Connection_id parametresi, odbc_connect() işlevi tarafından döndürülen bağlantı tanımlayıcısıdır. request parametresi, sunucu tarafından yürütülecek isteğin metnini içerir. İstek yerine getirilemezse, işlev FALSE döndürür; aksi takdirde, daha sonra odbc_execute() işlevi çağrılırken kullanılan sonuç tanımlayıcısı döndürülür (aşağıya bakın).

    odbc_prepare() işlevi tarafından hazırlanan bir sorgu, odbc_execute() işlevi tarafından yürütülür. odbc_execute() işlevinin sözdizimi:

    int odbc_execute(int sonuç kimliği [, dizi parametreleri])

    Sonuç_kimliği parametresi, odbc_prepare() işlevine yapılan başarılı bir çağrıda döndürülen sonuç tanımlayıcısıdır. İsteğe bağlı bir parametre, yalnızca işlev çağrıldığında ek veriler iletilirse iletilir.

    Aşağıdaki örneği göz önünde bulundurun:

    $connect = @obdc_connect("myAccessDB", "kullanıcı", "gizli")

    or die("ODBC veritabanına bağlanılamadı");

    $query = "Müşterileri GÜNCELLE SET cust_id = \"Milano, Inc.\"

    NEREDE cust_id \"2000cu\"";

    $result = odbc_prepare($connect, $sorgu) or die("Sorgu hazırlanamadı!");

    $result = odbc_execute($result) or die("Sorgu çalıştırılamadı!");

    odbc_close($bağlan);

    Aşağıdaki örnek, sorgu verilerinin tarayıcıda görüntülenmediği bir ODBC işlemini gösterir (genellikle bir SELECT komutuyla yapıldığı gibi). Bir QUERY sorgusu kullanan bir ODBC işlemi, aşağıda "odbc_result_all()" bölümünde açıklanmıştır.

    odbc_exec() işlevi, odbc_prepare() ve odbc_execute() işlevlerini birleştirir. odbc_exec() işlevinin sözdizimi:

    int odbc_exec (int bağlantı_kimliği, dize isteği)

    Connection_id parametresi, odbc_connect() işlevi tarafından döndürülen bağlantı tanımlayıcısıdır. request parametresi, sunucu tarafından yürütülecek isteğin metnini içerir. İstek yerine getirilemezse, işlev FALSE döndürür; aksi takdirde, sonraki işlev çağrılarında kullanılan bir sonuç tanımlayıcı döndürülür:

    obdc_connect("myAccessDB", "kullanıcı", "gizli")

    or die("ODBC veritabanına bağlanılamadı");

    odbc_close($bağlan) ;

    Bu örnekte, odbc_exec() işlevi, metni $query değişkeninde bulunan sorguyu yürütmeye çalışır. Başarılı olduğunda, $result değişkenine bir sonuç kimliği atanır; başarısız olursa, YANLIŞ olarak ayarlanır ve die() çağrılırken iletilen mesaj yazdırılır.

    odbc_result_all()

    Çok kullanışlı odbc_result_all() işlevi, odbc_exec() veya odbc_execute() çağrısından döndürülen bir sonuç kimliği için tüm girişleri biçimlendirir ve görüntüler. odbc_result_all() işlevinin sözdizimi:

    int odbc_result_all (int sonuç_kimliği [, dize tablo_biçimi])

    Sonuç_kimliği parametresi, odbc_exec() veya odbc_execute() işlevine yapılan başarılı bir çağrıda döndürülen sonuç tanımlayıcısıdır. İsteğe bağlı table_format parametresi, HTML tablosunun özelliklerini iletir. Aşağıdaki örneği göz önünde bulundurun:

    obdc_connect("myAccessDB", "kullanıcı", "gizli")

    or die("ODBC veritabanına bağlanılamadı");

    $query = "MÜŞTERİLERDEN * SEÇİN";

    $sonuç = odbc_exec($connect, $sorgu) or die("Sorgu yürütülemedi!");

    odbc_result_all($sonuç, "BGCOLOR="#c0c0c0" border="1" ");

    odbc_close($bağlan);

    Bu örneğin yürütülmesinin bir sonucu olarak, müşteriler tablosunun içeriği, 1 kalınlığında bir çerçeve ile açık gri bir arka plan üzerinde tabloda görüntülenecektir. Şekil l'de gösterilen veriler için tablonun görünümü. 11.1, Şek. 11.2.

    Pirinç. 11.2. Tarayıcıdaki ODBC verileri

    odbc_free_result()

    İyi programlama stili, tamamlanmış işlemlerle ilişkili tüm kaynakların serbest bırakılmasını gerektirir. ODBC sorgularıyla çalışırken bu görev odbc_free_result() işlevi tarafından gerçekleştirilir. odbc_free_result() işlevinin sözdizimi:

    int odbc_free_result (int sonuç_kimliği)

    İşlev parametresine, artık programda kullanılmayacak olan sonucun tanımlayıcısı iletilir. Komut dosyası sona erdiğinde tüm bellek kaynaklarının otomatik olarak serbest bırakıldığını unutmayın; bu nedenle, odbc_free_result() işlevinin çağrılması yalnızca çok büyük miktarda bellek tüketen çok büyük sorgular için gereklidir. Aşağıdaki, odbc_free_result() kullanımını gösteren bir örnektir. Komut dosyası sona erdiğinde tüm bellek otomatik olarak serbest bırakılacağından, aynı komut dosyasında birden çok sorgu çalıştırmayı düşünmüyorsanız, bu özelliğin genellikle atlanabileceğini unutmayın.

    obdc_connect("myAccessDB", "kullanıcı", "gizli")

    or die("ODBC veritabanına bağlanılamadı");

    $query = "MÜŞTERİLERDEN * SEÇİN":

    $sonuç = odbc_exec($connect, $sorgu) or die("Sorgu yürütülemedi!");

    odbc_result_all($sonuç, "BGCOLOR="#c0c0c0" border="1" "");

    odbc_free_result($sonuç);

    odbc_close($bağlan);

    odbc_result_all() işlevi sonuç tanımlayıcısını kullanmayı bitirdikten sonra, bellek odbc_free_result() kullanılarak sisteme döndürülür.

    Bu, Web erişimi için basit ODBC tabanlı arabirimler oluşturmak için vazgeçilmez olan PHP'nin ODBC işlevlerine girişimizi tamamlıyor. Bir sonraki bölümde, PHP kullanarak en popüler veritabanı sistemlerinden biri olan Microsoft Access ile etkileşim kurmanın ne kadar kolay olduğunu göstermek için bu işlevlerin çoğu kullanılacaktır.

    Microsoft Access ve PHP

    Microsoft Access veritabanının (http://www.microsoft.com/office/access) popülaritesi, kısmen kullanıcı dostu grafik arayüzünden kaynaklanmaktadır. Access'i bağımsız bir DBMS olarak kullanmaya ek olarak, MySQL veya Microsoft SQL Server gibi diğer veritabanlarıyla çalışmayı düzenlemek için grafik arayüzünü kullanabilirsiniz.

    PHP'de ODBC desteğini göstermek için PHP'de Microsoft Access veritabanlarına bağlanma sürecini anlatacağım. Yapması şaşırtıcı derecede kolaydır, ancak Microsoft Access'in popülaritesi sayesinde, yaratıcı cephaneliğinize hoş bir ektir. Bu süreci adım adım anlatacağım:

    1. Bir Access veritabanı oluşturun. Bunu nasıl yapacağınızı zaten bildiğiniz varsayılır ve nasıl yapılacağını bilmiyorsanız, ancak yine de bu örneğin yürütülmesini izlemek istiyorsanız, sihirbaz programının hizmetlerini kullanın. Sihirbazı kullanarak standart bir kişi veritabanı oluşturdum. Tabloda birkaç kayıt oluşturduğunuzdan ve tablo adını hatırladığınızdan emin olun, kısa süre sonra ihtiyacımız olacak!
    2. Veritabanını bilgisayarınıza kaydedin.
    3. Bir sonraki adımda, ODBC kullanarak Access veritabanına erişimi düzenleyeceğiz. Başlat > Ayarlar > Denetim Masası'na gidin (Başlat > Ayarlar > Kontrol Paneli). Kontrol panelinde ODBC Veri Kaynakları (32 bit) simgesini bulun. Bu simge, sisteminizdeki çeşitli sürücüleri ve veri kaynaklarını yapılandırmak için ODBC Yöneticisini başlatır. Bu simgeye çift tıklayarak programı çalıştırın. Yönetici penceresi varsayılan olarak Kullanıcı DSN'si (Kullanıcı DSN'si) sekmesinde açılır. Bu sekme, belirli bir kullanıcıya özel olan ve yalnızca o bilgisayarda kullanılabilen veri kaynaklarını listeler. Bu örnek, yalnızca böyle bir veri kaynağı kullanacaktır.
    4. Pencerenin sağ tarafındaki Ekle... düğmesini tıklayın. Yeni kaynakla çalışacak sürücüyü seçmek için yeni bir pencere açılır. Microsoft Access Sürücüsü (*.mdb) satırını seçin ve Bitir'e tıklayın.
    5. Ekranda yeni bir Microsoft Access ODBC Sürücü Kurulumu (ODBC Microsoft Access Kurulumu) penceresi görünür. Formdaki Veri Kaynağı Adı metin kutusunu bulun ve oluşturduğunuz Access veritabanının adını yazın. İsteğe bağlı olarak, doğrudan Veri Kaynağı Adı alanının altındaki metin alanına bir açıklama girebilirsiniz.
    6. Seç... düğmesini tıklayın -- Windows Gezgini tarzı bir pencere belirir. ODBC kullanılarak erişilecek bir veritabanı bulmanızı ister.
    7. Veritabanınızı dizin ağacında bulun ve üzerine çift tıklayın. Microsoft Access ODBC Sürücü Kurulumu penceresine dönersiniz. Seçili veritabanının yolu Seç... düğmesinin üzerinde görüntülenir.Tamam'a tıklayın.
    8. Hazır! Artık ODBC kullanarak Access veritabanıyla çalışabilirsiniz.

    Tek yapmanız gereken ODBC üzerinden veritabanı ile çalışacağınız bir script oluşturmak. Aşağıdaki komut dosyasında, Access sihirbazı kullanılarak oluşturulan bir kişi tablosundaki tüm bilgileri görüntülemek için ortak ODBC işlevleri (yukarıya bakın) kullanılacaktır. Ancak, senaryoya bakmadan önce, Access'te Kişiler tablosunun nasıl göründüğünü bilmek iyi bir fikirdir (Şekil 11-3).

    Pirinç. 11.3. MS Access'te Kişiler tablosu

    Artık veritabanından hangi bilgilerin alınacağını bildiğinize göre, komut dosyasına geçebiliriz. Belirli bir işlevin ne yaptığını unuttuysanız, bu bölümün başındaki açıklamaya bakın. Liste 11.7'nin sonuçları Şekil 1'de gösterilmektedir. 11.4.

    Liste 11.7. MS Access ile çalışmak için ODBC işlevlerini kullanma

    // ODBC veri kaynağına bağlan "ContactDB" ;connect = odbc_connect("ContactDB", "","")

    or die("Veri kaynağına bağlanılamadı.");

    // İstek metni oluştur

    $query = "Ad, Soyadı, Cep_Telefon, Kişilerden E-posta SEÇ";

    // istek hazırla

    $sonuç = odbc_prepare($bağlan,$sorgu);

    // Sorguyu yürütün ve sonuçları görüntüleyin

    odbc_execute($sonuç);

    odbc_result_all($sonuç, "BGCOLOR="#c0c0c0" kenar=1");

    // Sonuç işleme tamamlandı, boş bellek odbc_free_result($result);

    // Bağlantıyı kapat odbc_close($connect);

    Her şey basit değil mi? Ve harika olan şey, bu betiğin diğer herhangi bir ODBC etkin DBMS ile tamamen uyumlu olmasıdır. Pratik yapmak için, açıklanan tüm adımları başka bir DBMS için tekrarlamayı deneyin, komut dosyasını çalıştırın - ve Şekil 2'de gösterilenle aynı sonuçları alacaksınız. 11.4.

    Pirinç. 11.4. Bir web tarayıcısında Kişiler tablosunun içeriği

    Proje: PHP Bağlantı Dizini

    Sitenizi gerçek içerikle doldurmanın en kolay yolu, kullanıcının bunu sizin için yapmasına izin vermektir. Elbette veri girmenin en uygun yolu bir HTML formu kullanmaktır.

    Kullanıcı tarafından girilen bilgiler işlenmeli ve saklanmalıdır. Önceki bölümün taslağı, bu görevin PHP ve bir metin dosyası ile ne kadar kolay gerçekleştirilebileceğini gösterdi. İnkar edilemez bir şekilde, metin dosyaları nispeten küçük ve basit veri parçalarını depolamak için iyidir, ancak tam teşekküllü web uygulamalarında bilgi genellikle veritabanlarında saklanır. Bu örnekte, web siteleri hakkında bilgi depolamak için MySQL veritabanı kullanılmıştır. Gezinmeyi kolaylaştırmak için siteler birkaç kategoriye ayrılmıştır. Kullanıcı, site ile ilgili bilgileri HTML biçiminde girebilir ve site yöneticisi tarafından tanımlanan standart kategorilerden birine atayabilir. Ek olarak, kullanıcı bir dizin sayfası yükleyebilir ve adına tıklayarak belirli bir kategorideki tüm sitelerin listesini görüntüleyebilir.

    Öncelikle SQL veritabanında hangi site bilgilerinin saklanacağına karar vermelisiniz. Basit olması için kendimi şu nitelikler grubuyla sınırlayacağım: başlık, URL, kategori, eklenme tarihi ve açıklama. Yani MySQL'deki bir tablo tanımı şuna benzer:

    mysql>tablo yer imleri oluştur (Kategori INT, site_name char(35), url char(50),

    date_added tarihi, açıklama karakteri(254));

    Yer imleri tablosunun tanımı hakkında dikkat edilmesi gereken birkaç nokta vardır. İlk olarak, sitenin kategorisiyle ilgili bilgiler bir nedenden dolayı tamsayı olarak saklanmaktadır. -- ama kategori isimlerini kullanıcı için daha anlamlı ve anlaşılır kılmak daha iyi olmaz mıydı? Endişelenmeyin, başlatma dosyası tamsayı dizinlerini kategori adlarına bağlayan bir dizi oluşturacaktır. Gelecekte, yönetici bireysel kategorileri değiştirebilir ve hatta silebilir. Kategoriler hakkında bilgi depolamak bu görevi büyük ölçüde basitleştirir. Ayrıca tamsayı alanı, kategori adı tabloda tekrar tekrar saklandığından disk alanından tasarruf sağlar. Tablonun yapısıyla ilgili bir diğer durum ise açıklamanın uzunluğunun 254 karakterle sınırlandırılmasıdır. Bu açıklama kapsamına bağlı olarak, char() türü yerine orta veya metin türünü kullanabilirsiniz. Alan türleri hakkında daha fazla bilgi için MySQL belgelerine bakın.

    Bu uygulama üzerinde çalışmanın bir sonraki adımı, bir başlatma dosyası oluşturmaktır. Global değişkenlere ek olarak, başlatma dosyasında iki fonksiyon tanımlanmıştır: add_bookmark() ve view_bookmark(). add_bookmark() işlevi, kullanıcının girdisini formdan alır ve bunu tabana dahil eder. view_bookmark() işlevi bir kategorinin dizinini alır, belirtilen kategoriye ait veritabanındaki tüm girdileri okur ve bunları tarayıcıda görüntüler. Açıklamalarla birlikte uygulama başlatma dosyası init.inc, Liste 11-8'de gösterilmektedir.

    Liste 11.8. Referans dizini başlatma dosyası (init.inc)

    // Dosya: init.inc

    // Amaç: global değişkenler ve fonksiyonlar.

    // projede kullanıldı

    // Varsayılan sayfa başlığı $title = "(!LANG:Yer İşareti Depom":!}

    // Arka plan rengi $bg_color = "beyaz";

    $post_date = tarih("Ymd");

    "eğlence",

    // MySQL sunucu verisi $host = "localhost"; $kullanıcı = "kök"; $pswd = "";

    // Veritabanı adı $veritabanı = "kitap";

    // Tablo adı $bookmark_table = "yer imleri";

    // Tablo hücrelerinin rengi $cell_color = "#c0c0c0";

    // MySQL sunucusuna bağlantı kurun

    @mysql_pconnect($host, $user, $pswd) or die("MySQL sunucusuna bağlanılamadı!");

    // Veritabanını seç

    @mysql_select_db($veritabanı) or die("Sdatabase veritabanı seçilemedi!");

    // İşlev: add_bookmark()

    function add_bookmark(Sategory, Ssitejname.$url, $description)(

    KÜRESEL $bookmark_table, $post_date;

    $query = "$bookmark_table İÇİNE EKLE

    DEĞERLER(\"$kategori\", \"$site_adı\", \"$url\", \"$post_date\", \"$açıklama\");

    $result = @mysql_query($query) or die("Yer imi bilgisi eklenemedi!");

    ) // imi eklemek<

    // İşlev: view_bookmark()

    // Amaç: tüm bağlantıların yer imi tablosundan seçim,

    function view_bookmark($kategori) (

    KÜRESEL $bookmark_table, $cell_color, $kategoriler;

    $query = "Site_adı, url, DATE_FORMAT(tarih_added,"%m-%d-%Y") SEÇ tarih_eklendi, açıklama

    $yer imi tablosundan NEREDE kategori = $kategori SİPARİŞ TARİHİNE GÖRE DESC";

    $sonuç = @mysql_query($sorgu);

    Yazdır"

    ";

    Yazdır"

    ";

    if (mysql_numrows($result) > 0) ;

    while ($satır = mysql_fetch_array($sonuç));

    Gönderildi: ".$satır["eklenme tarihi"]."
    "

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    ";

    Yazdır"

    Kategori: $kategoriler[$kategori]
    ";

    Yazdır" ".$satır["site_adı"]."

    Yazdır"

    ";

    Yazdır" http://".

    $satır["url"]."
    ";

    Yazdır"

    ";

    $satır["açıklama"] yazdır."
    ";

    Yazdır"


    Şu anda bu kategoriye giren yer imi yok. neden yapmıyorsun bir tane ekle?
    Dizine dön

    Yazdır" Yer işareti ekle

    ";

    // yer imini görüntüle

    Sonraki sayfa, add_bookmark.php (Liste 11.9), veritabanına eklenecek yeni bağlantı hakkında bilgi girmek içindir. add_bookmark() işlevi, kullanıcı verilerini işlemek için çağrılır.

    Liste 11.9. add_bookmark.php programı

    INCLUDE("init.inc");

    <?=$title:?>

    eğer (!$seenform) :

    <1nput type="hidden" name="seenform" value="y">

    Kategori:


    site adı:


    URL: (yap olumsuzluk"http://" dahil!)


    Tanım:


    add_bookmark($kategori, $site_adı, $url, $açıklama);

    Yazdır"

    Yer iminiz depoya eklendi.

    buraya tıklayın dizine dönmek için.

    ";

    Sayfa ilk yüklendiğinde tarayıcıda bir form görüntülenir (Şekil 11-5).

    Pirinç. 11.5. add_bookmark.php sayfası tarafından oluşturulan form

    Sonraki sayfa, view_bookmark.php, basitçe view_bookmark() işlevini çağırır. Bu sayfanın kodu Liste 11-10'da gösterilmektedir.

    Liste 11.10. view_bookmark.php programı

    INCLUDE("Listing11-8.php"); ?>

    <?=$title:?>

    view_bookmark($kategori) :

    Pirinç. 11.6. Yemek kategorisi için view_bookmark.php sayfasını çalıştırma

    Yalnızca kullanıcının listeden bağlantılar seçtiği bir sayfa oluşturmak için kalır. Bu dosyaya index.php adını verdim (Liste 11.11).

    Liste 11.11. index.php programı

    INCLUDE("init.inc");

    alink="#808040">

    while (list($key, Svalue) = her(Scategories)) :

    Yazdır" $değer
    ";

    Yeni bir yer işareti ekle

    $categories dizisi init.inc dosyasında saklanan değerlerle bırakılırsa Liste 11-11, Liste 11-12'de gösterilen HTML'yi tarayıcıya gönderir.

    Liste 11.12. index.php yürütülürken üretilen çıktı

    Görüntülemek için yer imi kategorisini seçin:

    bilgisayarlar

    eğlence

    yemek

    yaşam tarzı

    devlet

    yolculuk

    Yeni bir yer işareti ekle

    Sonuçlar

    Bu bölüm oldukça büyüktür ve bazı okuyucular için tüm kitaptaki en önemli bölüm olabilir. Şüphesiz, veritabanları ile çalışmak

    veritabanları web sitelerinin işlevselliğini büyük ölçüde artırdığından, PHP dilinin en dikkate değer özelliklerinden biridir. Özellikle, aşağıdaki konuları ele aldık:

    • SQL hakkında genel bilgiler;
    • PHP'de standart veritabanı desteği;
    • MySQL sunucusuna giriş;
    • MySQL ile çalışmak için standart PHP işlevleri;
    • en basit arama sisteminin uygulanması;
    • tablo sıralama;
    • ODBC hakkında genel bilgiler;
    • ODBC ile çalışmak için standart PHP işlevleri;
    • PHP'de Microsoft Access ile etkileşim;
    • web sitesinde kullanıcı verilerinin depolanması.

    Büyük, gerçekten dinamik PHP web siteleri geliştiren okuyucu, tekrar tekrar veritabanları konusuna dönmek zorunda kalacaktır. Yalnızca PHP belgelerini değil, aynı zamanda veritabanı teknolojilerine ayrılmış diğer kaynakları da dikkatle incelemenizi öneririm. Bu alanda, birçok modern teknolojide olduğu gibi, uzmanların bile tüm yenilikleri takip etmek için her zaman zamanı yoktur.

    Bir sonraki bölüm, web programlamanın önemsiz konularından biri olan şablonlar hakkındadır. PHP programlamasında şablonların kullanılması, büyük ölçekli web sitelerinde çalışırken önemli ölçüde zaman ve emek tasarrufu sağlar.