SphereServer — MySQL db.execute Komutları Rehberi
UO-Developer.com — sphere.ini, bağlantı ve SQL komutları (Trina)Bu rehber, Sphere scriptlerinde MySQL veritabanına db.execute ile nasıl işlem yapılacağını anlatır. Kurulum ve libMySQL.dll adımları için ayrı rehbere bakın.
Yazar: Trina | Seviye: Orta – İleri | Gereksinim: Sphere 0.56b, MySQL bağlantısı
İlgili sayfalar: MySQL'den Yararlanma | Sphere, MySQL ve PHP İlişkisi | Türkçe Sphere.ini
İçindekiler
- Giriş
- sphere.ini ayarları
- db.connect ve otomatik bağlantı
- db.execute genel
- CREATE TABLE
- INSERT
- UPDATE
- DELETE
- SELECT
- Sonuç
1. Giriş
Diğer Sphere konularına kıyasla MySQL, bilgisayar ve veritabanı hakkında deneyimi olmayanlar için daha zordur. Tabloları Excel veya gözle görülür bir tablo gibi düşünürseniz mantığı kavramak kolaylaşır.
MySQL'de yapılacak işlemler db.execute ile başlar. Çift tırnak " işaretleri arasındaki metin, çalıştırılacak SQL komutudur. Veri okuma (SELECT) diğer komutlara göre biraz daha karışıktır; bu yüzden en sonda anlatılacaktır.
2. sphere.ini Ayarları
Bu kodları kullanmak için sphere.ini içinde ayar yapmanız gerekir. Dosyayı açınca MySql configuration bölümünü kolayca görebilirsiniz.
// MySql configuration.
MYSQL=1
MySqlHost=localhost
MySqlUser=kullanici_adi
MySqlPassword=sifreniz
MySqlDatabase=sphere_db- MYSQL=1 — Sphere'in MySQL kullanımını aktif eder
- MySqlHost — MySQL'in bulunduğu makinenin adresi
- MySqlUser — MySQL kullanıcı adı
- MySqlPassword — MySQL şifresi
- MySqlDatabase — Sphere için kullanılacak veritabanı adı; UO sunucusu hosting'den alındıysa genelde firma bu adı verir
3. db.connect ve Otomatik Bağlantı
Bu ayarları yaptıktan sonra Sphere'i açın; konsolda db.connect yazarak MySQL veritabanına bağlanın.
db.connect komutunu 56b standart script pack'teki scripts\sphere_serv_triggers.scp dosyasında, f_onserver_start fonksiyonunun altına eklerseniz sunucu her açıldığında otomatik bağlanır:
[FUNCTION f_onserver_start]
DB.CONNECT
return 14. CREATE TABLE
Veritabanında yeni tablo oluşturur. Genelde hazır sphere_mysql.sql yeterlidir; script içinde sık kullanılmaz.
db.execute "create table test(isim text, killsayisi int, uid text)"Satır satır anlamı:
- db.execute — MySQL'de işlem yapacağımızı belirtir
- create table test — test adında tablo oluşturur
- isim text — isim kolonu; metin (string) değerler
- killsayisi int — killsayisi kolonu; tamsayı (1, 2, 3…)
- uid text — uid kolonu; metin değerler
İsteğe bağlı: kolon listesinin başına numara int not null auto_increment ekleyebilirsiniz. not null = boş olamaz; auto_increment = her INSERT'te sayı otomatik artar. Ayrıntılar için MySQL dokümantasyonuna bakın.
5. INSERT
Oluşturduğunuz tablolara veri ekler.
[FUNCTION asdas]
DB.CONNECT
db.execute "insert into test values ('Trina',55,'04ff')"Anlamı:
- insert into — tabloya veri girişi
- test — hedef tablo adı
- values — kolon sırasına göre değerler (yukarıdaki kod bloğuna bakın)
Not 1: Metin değerler tek tırnak işaretleri arasında olmalıdır. Çift tırnak kullanırsanız SQL hatası alırsınız.
Not 2: Tamsayı kolonlara (int) tırnak koymayın. Örnekte 55 tırnaksız yazıldı; tablo oluştururken killsayisi int demiştik.
Not 3: Tüm kolonlara yazmıyorsanız kolon adlarını parantez içinde belirtin:
db.execute "insert into test (killsayisi, uid) values (<kills>, '<uid>')"Oyunda .asdas yazdığınızda test tablosuna Trina satırı eklenir.
6. UPDATE
Tablodaki mevcut veriyi değiştirir.
Önce ikinci bir kayıt ekleyelim:
db.execute "insert into test values ('Tolga',30,'05aa')"Tablodaki tüm satırlarda killsayisi değerini 25 yapmak:
db.execute "update test set killsayisi=25"Yalnızca isim kolonunda Trina yazan satırı güncellemek:
db.execute "update test set killsayisi=55 where isim='Trina'"where koşulu sayesinde sadece eşleşen satır değişir; diğer satırlar (ör. Tolga) etkilenmez.
7. DELETE
Tablodan satır siler.
Tüm satırları silmek:
db.execute "delete from test"İki satır varken bu komut tabloyu tamamen boşaltır.
Belirli koşulla silmek — UPDATE'teki where mantığıyla aynı:
db.execute "delete from test where isim='Tolga'"Yalnızca isim kolonunda Tolga yazan satır silinir; Trina satırı kalır.
8. SELECT
Tablodan veri okumak biraz daha karışıktır; dikkatli incelenirse anlaşılır.
Tüm satırları çekmek:
db.execute "select * from test"Sonuçları döngüyle okuyup sysmessage ile göstermek:
[FUNCTION test]
DB.CONNECT
db.execute "select * from test"
for x 0 88
if !(<db.row.<dlocal.x>.isim>)
return 1
endif
sysmessage <db.row.<dlocal.x>.isim>
endforSatır satır anlamı:
- db.execute "select * from test" — test tablosundan veri al
- for x 0 88 — 0–88 arası satır taranır; beklenen satır sayısı fazlaysa üst sınırı artırın; boş satırda zarar yok
- if !(...isim) — satırdaki isim kolonu boşsa
- return 1 — döngüyü durdur
- sysmessage ... — o satırdaki isim değerini yazdır
- endfor — döngüyü kapat
Belirli koşulla okumak — UPDATE/DELETE'teki where gibi:
db.execute "select * from test where killsayisi=25"Yalnızca killsayisi kolonu 25 olan satır(lar) döner.
9. Sonuç
MySQL'de daha birçok komut vardır; Sphere scriptleri için günlük kullanımda yukarıdakiler (CREATE, INSERT, UPDATE, DELETE, SELECT) çoğu senaryoyu karşılar.
Kurulum ve libMySQL: MySQL Kurulumu | libMySQL.dll 32 bit


Yanlış yazmışım oraya.