Anasayfa
UO Sunucular
Forumlar
Profilim

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 1

4. 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>
endfor

Satı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

Copyright © Trina — UO-Developer.com

UO-Dev SPONSOR

UO-Dev SPONSOR

RasmuS 03-03-2010 15:48
Geç olsada gördüm gerçekten çok güzel anlatılmış bir döküman ellerine sağlık
Trina- 04-05-2011 00:58
"select " ile başlayan komutlarda .execute kullanmayınız .query kullanınız yoksa hata alırsınız.

Yanlış yazmışım oraya.
Leppasol 07-04-2017 03:08
Güncellermiyiz

Üyelerin oylama ortalaması (10 dışında) :

8.75

Oylar: 4 den itibaren 24-07-2010 07:14