Anasayfa
UO Sunucular
Forumlar
Profilim

Sphere MySQL Komutları — DB API Referansı

UO-Developer.com — db.connect, db.query, db.execute ve ROW erişimi

Sphere üzerinde temel MySQL komutlarını kullanabilirsiniz. Bu komutlar normal MySQL ile benzer görünse de Sphere script ortamına özgü sözdizimi ve kısıtlamaları vardır.

Komutlar script içinde db. veya DB. önekiyle yazılır — Sphere çoğu build'de büyük/küçük harfe duyarsızdır.

Konu: Sphere DB API | Seviye: Orta | Gereksinim: Sphere 0.56b, MYSQL=1

İlgili: MySQL Komutları | MySQL Kurulumu | MySQL'den Yararlanma

SQL örnekleri: projedeki Sphere MySQL db.execute Rehberi | Performans: Sphere MySQL İpuçları


İçindekiler
  • Genel kullanım
  • CONNECT — bağlantı kur
  • CONNECTED — bağlantı kontrolü
  • EXECUTE — yazma sorguları
  • QUERY — okuma sorguları
  • ROW.NUMROWS / NUMCOLS
  • ROW kolon erişimi
  • CLOSE — bağlantı kapat
  • Örnek akış

1. Genel Kullanım

Sphere MySQL API'si standart SQL'i script içinden çalıştırmanızı sağlar. Temel ayrım:

  • db.connect — bağlantı aç
  • db.connected — bağlantı var mı kontrol et
  • db.execute — INSERT, UPDATE, DELETE, CREATE TABLE vb.
  • db.query — SELECT — veri okuma
  • db.row.numrows — dönen satır sayısı
  • db.close — bağlantı kapat

sphere.ini ayarları: MYSQL=1, MySqlHost, MySqlUser, MySqlPassword, MySqlDatabase


2. CONNECT — Bağlantı Kur

Ne işe yarar: MySQL ile Sphere arasında sphere.ini'de belirtilen ayarlara göre bağlantı kurar.

db.connect

Sunucu her açıldığında otomatik bağlanmak için f_onserver_start içine ekleyin:

[FUNCTION f_onserver_start]
db.connect
return 1

3. CONNECTED — Bağlantı Kontrolü

Ne işe yarar: Değer 1 ise MySQL bağlantısı yapılmış, 0 ise yapılmamış demektir.

if (<db.connected>)
    serv.log MySQL: baglanti OK
else
    serv.log MySQL: baglanti YOK
endif

Her db.execute veya db.query öncesi bağlantı kontrolü yapmanız önerilir.


4. EXECUTE — SQL Çalıştır (Yazma)

Ne işe yarar: MySQL komutlarını çalıştırır. INSERT, UPDATE, DELETE, CREATE TABLE için kullanın.

db.execute "INSERT INTO playerList (charName, charUid) VALUES ('<name>', '<uid>')"
db.execute "UPDATE accounts SET status='1' WHERE login='<uid>'"
db.execute "DELETE FROM online_players WHERE playerUid='<uid>'"
db.execute "CREATE TABLE IF NOT EXISTS test (id INT AUTO_INCREMENT PRIMARY KEY, name TEXT)"

SQL metni çift tırnak içinde; string değerler tek tırnak ile yazılır.


5. QUERY — Veri Oku (SELECT)

Ne işe yarar: MySQL veritabanından Sphere'a bilgi gönderir — SELECT sorguları için.

db.query "SELECT charName, charUid FROM playerList WHERE status='0'"

SELECT sonrası satır ve kolon verilerine ROW API ile erişilir. Bazı eski örneklerde SELECT için db.execute de geçer; okuma için db.query tercih edin.


6. ROW.NUMROWS ve ROW.NUMCOLS

ROW.NUMROWS — Son sorgu tarafından döndürülen satır sayısı.

ROW.NUMCOLS — Son sorgu tarafından döndürülen sütun sayısı.

db.query "SELECT charName FROM playerList"
if (<db.row.numrows> > 0)
    serv.log Toplam satir: <db.row.numrows>
endif

Döngü kurarken üst sınır:

for r 0 <eval <db.row.numrows>-1>
    // islem
end

7. ROW — Kolon Erişimi

ROW kolon listesi — Son SELECT sorgusunun döndürdüğü sütunlara satır numarası ve kolon adıyla erişilir.

İlk satır, charName kolonu:

<db.row.0.charName>

İkinci satır — indeks 1:

<db.row.1.charUid>

Döngü ile tüm satırlar:

db.query "SELECT charName, charUid FROM playerList"
if (<db.row.numrows> > 0)
    for r 0 <eval <db.row.numrows>-1>
        serv.log Isim: <db.row.<eval <local.r>>.charName> UID: <db.row.<eval <local.r>>.charUid>
    end
endif

Kolon adları SQL'deki AS takma adlarıyla eşleşir — örnek SUM AS point → db.row.0.point


8. CLOSE — Bağlantı Kapat

Ne işe yarar: MySQL ile Sphere arasındaki bağlantıyı kapatır.

db.close

Kısa fonksiyonlarda işlem bitince db.close kullanın. Sunucu kapanırken bağlantı zaten sonlanır; f_onserver_start'ta açık bırakmak da yaygındır.


9. Örnek Akış
[FUNCTION f_mysql_test]
db.connect
if (<db.connected>)
    db.execute "INSERT INTO logs (msg) VALUES ('test')"
    db.query "SELECT COUNT(id) AS sayi FROM logs"
    serv.log Kayit sayisi: <db.row.0.sayi>
    db.close
else
    serv.log MySQL baglantisi kurulamadi
endif
return 1

10. Komut Özet Tablosu
  • db.connect — Bağlantı kur — sphere.ini ayarları
  • db.connected — 1 = bağlı, 0 = değil
  • db.execute — INSERT / UPDATE / DELETE / CREATE
  • db.query — SELECT — veri oku
  • db.row.numrows — Son sorgu satır sayısı
  • db.row.numcols — Son sorgu sütun sayısı
  • db.row.0.kolonAdi — Satır/kolon değeri
  • db.close — Bağlantıyı kapat

11. Sık Yapılan Hatalar
  • Bağlantı kontrolsüz sorgu — db.connect ve db.connected atlandı
  • SELECT için execute — okuma için db.query kullanın
  • ROW indeksi — ilk satır 0; 1 değil
  • Kolon adı hatası — SQL'deki kolon/alias adı ile birebir eşleşmeli
  • libMySQL.dll eksik — Sphere klasöründe 32-bit DLL olmalı

Forum: Sphere MySQL Hakkında

UO-Dev SPONSOR

UO-Dev SPONSOR

Henüz yorum yapılmamış. Yorum yazabilmek için giriş yapmanız gerekir.

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

1.00

Oylar: 1 den itibaren 03-07-2011 02:28