MySQL R33+ Kullanım
Merhabalar Arkadaşlar.
MySQL R33+ hakkında sorular eşliğinde kullanış şekillerini göstermeye çalışacağım. Konuyu okumadan önce SA-MP MySQL Plugin sürümünüzün konuyla uyumlu olup olmadığını kontrol edin. Umarım istediğiniz bilgiyi alırsınız...
MySQL ile Nasıl Bağlantı Kurarım?MySQL serverımız ile bağlantı kurmak için mysql_connect fonkiyonunu kullanırız.
[!] Öncelikle MySQL Bağlantımız için yeni bir değişken tanımlamalıyız. Bağlantı kurarken bağlantı id'sini bu değişkene eşitleyeceğiz. new MySQL;
Daha sonrasında bağlantı kuracağımızda bağlantımızı bu değişkene eşitleyeceğiz.
mysql_connect fonksiyonunu tanıyalım. mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2)
Buradaki host kısmı bağlantı kuracağınız MySQL serverinin hostu olmalıdır. Kendi bilgisayarınızdaki MySQL serverine bağlantı kuracaksanız localhost veya 127.0.0.1 yazabilirsiniz.
user kısmı MySQL serverinizdeki kullanıcı adıdır. Genelde root olarak kullanılır.
database kısmı kullandığınız tabloların olduğu veritabanı adı olmalıdır.
password kısmı MySQL kullanıcılarında kullandığınız kullanıcı adına ait şifre olmalıdır. localhost sunucularda WAMP vs. kullananlar için genelde şifresizdir. Çünkü local olarak kullanıldığı için dışarıdan bağlantılara kapalıdır.
port kısmı genelde tüm MySQL sunucuları için 3306 olarak sabittir. Ancak MySQL sunucunuzun portunu değiştirdiyseniz buradaki portu tanımlayarak bağlantı kurabilirsiniz.
Şimdi ise tüm öğrendiklerimizi toparlayarak yukarıda tanımladığımız değişken için bir bağlantı kuralım.MySQL = mysql_connect("localhost", "root", "db", "");
İşte bağlantımız hazır. Bağlantımızı OnGameModeInit ya da FS kullanacak isek OnFilterScriptInit kısmından yapmalıyız.
MySQL Bağlantımı Nasıl Kontrol Ederim - Bağlantım Başarılı Mı? mysql_errno fonksiyonu ile kontrol edebiliriz. Bu fonksiyon 0'dan farklı bir değer döndürürse bağlantımız kurulamamıştır. Bu fonksiyonu mysql_connect fonksiyonumuzun hemen arkasına yerleştirebiliriz.if(mysql_errno(MySQL) != 0)
{
print("[!] MYSQL Bağlantısı Kurulamadı..!");
return 0;
}
else
{
print("[!] MYSQL Bağlantısı Kuruldu.");
}
MySQL'da SELECT sorgusunu kullanarak nasıl veri çekerim? Öncelikle genel olarak kullandığımız MySQL sorgu fonksiyonumuz mysql_tquery olacaktır. Bu fonksiyonun ilk bölmesine bağlantımızı tanımladığımız değişkeni yazacağız. Bu fonksiyonda sorgumuz için bir public oluşturacağız. Sorgu işlerken bu public'ten ilerleyerek verilerimizi çekecektir.
Eğer istersek bu public için format kullanabiliriz. Örneğin sorguyu playerid için çekeceksek ve veri tanımlarken bunu kullanacaksak sorguda "i", playerid şeklinde formatlama yapabiliriz.
Ben VerileriCek şeklinde bir public kullanarak örnek bir sorgu oluşturuyorum.mysql_tquery(MySQL, "SELECT * FROM table", "VerileriCek", "", "");
Sorgu çalıştığında VerileriCek public'i çalışacak. Bu bölümde verileri çekmek için cache_get_data kullanacağız. forward VerileriCek();
public VerileriCek()
{
new rows, fields; // buradaki rows her bir veri, fields ise verilerin her bir sütunudur.
cache_get_data(rows, fields, MySQL);
// Burada birden fazla veri çekeceksek while veya for döngülerini kullanabiliriz. Ben while kullanıyorum.
new i;
new szField[128], Float: FloatVar, IntVar; // Verilerde kullanacağımız geçici veriler;
while(i < rows) // rows aynı zamanda veri sayısıdır. Burada i, rowsa ulaşana kadar veri çekmeye devam edecek.
{
/*
Ben göstermek adına verilerimi geçici değişkenlere tanımlıyorum.
Siz isterseniz kendinize göre değişkenlerinize uyarlayabilirsiniz.
*/
// Integer (Sayısal) Veri Çekme.
IntVar = cache_get_field_content_int(i, "field1", MySQL);
// Eşitlik kurarsak verimizi değişkene tanımlarız. Integer = cache_get_field_content_int
// String Veri Çekme.
cache_get_field_content(i, "field2", szField, MYSQLCON, sizeof(szField));
// Burada stringimizi szField değişkenine çektik.
// Float Veri Çekme.
cache_get_field_content(i, "field2", szField, MYSQLCON, sizeof(szField));
FloatVar = floatstr(szField);
// Burada verimizi string gibi çektik, sonrasında floatstr kullanarak floata dönüştürdük.
i++;
}
}
Satır içi/CallBack olmadan nasıl SELECT sorgusu işlerim?Bunun için örnek bir fonksiyon atacağım. stock KarakterSayisi()
{
new szResult[64], rows, fields;
format(szResult, sizeof(szResult), "SELECT `id` FROM `karakterler`");
new Cache:result = mysql_query(MySQL, szResult);
cache_get_data(rows, fields, MySQL);
cache_delete(result);
if(rows)
{
return rows;
}
return 0;
}
Bu fonksiyon örnek olarak yapılmıştır. Kullandığınızda karakter sayısını döndürür. Kendinize göre bu şekilde sorgu yapabilirsiniz.
MySQL'da UPDATE sorgusu nasıl işlerim?Update sorgusu MySQL'da olan bir verinin alt verilerini değiştirmek için kullanılır. Örnek olarak bir sorgu atacağım. Tüm verilerimizi küçük tırnak işaretiyle kullanabiliriz. '127.0.0.1' şeklinde.new strQuery[64], oyuncuIP[16];
GetPlayerIp(playerid, oyuncuIP, sizeof(oyuncuIP);
format (strQuery, sizeof(strQuery), "UPDATE karakterler SET IP = '%s'", oyuncuIP);
mysql_tquery(MySQL, strQuery, "", "", "");
Burada callback kullanmadığımız için son 3 bölmeyi boş bıraktık.
mysql_real_escape_string Nerelerde, Nasıl Kullanılır?MySQL sorgularında string veriler kullanılırken tırnak işareti gibi işaretler kullanıldığında sorgu çökebilir ve çöktüğünde sorgu işlemez. Bu gibi durumlarda mysql_real_escape_string kullanarak bunun önüne geçebiliriz. Örnek olarak kullanım yöntemi olarak bir sorgu atıyorum. new birlikAd[24], strSorgu[64];
mysql_real_escape_string(BirlikBilgi[birlikAdi], birlikAd, sizeof(birlikAd));
format(strSorgu, sizeof strSorgu, "UPDATE birlik SET BirlikAdi = '%s'", birlikAd);
mysql_tquery(MySQL, strSorgu, "", "", "");
MySQL'da INSERT sorgusunun SQL ID'sini nasıl çekeceğim?
(INSERT ID)INSERT sorgularda da aynı şekilde callback kullanarak SQL ID'sini çekebilirsiniz. Örnek olarak bir kullanım şekli atıyorum.forward VeriOlustu(sayi)
public VeriOlustu(sayi)
{
new x = BosVeri();
Veri[x][vID] = cache_insert_id(MySQL);
Veri[x][vSayi] = sayi;
}
stock VeriOlustur(sayi)
{
new sorgu[64];
format(sorgu, sizeof sorgu, "INSERT INTO veriler (sayi) VALUES ('%d')", sayi);
return mysql_tquery(MySQL, sorgu, "VeriOlustu", "i", sayi);
}
MySQL'da DELETE sorgusunu nasıl işlerim?Bunun için de yukardaki örneğe uygun bir örnek oluşturuyorum. forward VeriSilindi(SQLid)
public VeriSilindi(SQLid)
{
for(new i = 0; i < MAX_VERI; i++)
{
if(Veri[x][vID] == SQLid)
{
Veri[x][vID] = 0;
Veri[x][vSayi] = 0;
}
}
}
stock VeriSil(SQLid)
{
new sorgu[64];
format(sorgu, sizeof sorgu, "DELETE FROM veriler WHERE ID = '%d'", SQLid);
return mysql_tquery(MySQL, sorgu, "VeriSilindi", "i", SQLid);
}
Temel MySQL kullanımları için aklıma gelenler bunlar. Yanlışım var ise veya eklemeyi unuttuğum, eklemenizi istediğiniz bir şey varsa konu altından yazarsanız ekleyebilirim.Saygılarımla, Kraus
Başarılı bir anlatım - Teşekkürler.
Bilmeyenler için yararlı, eline sağlık. :helal:
Eline sağlık abi muhteşem anlatmışsın.
Anlatımın için teşekkürler.
Yararlı. Eline Sağlık Usta :helal:
Eline sağlık çok açıklayıcı bir anlatım olmuş
Yeni başlayanlar veya bilmeyenler için güzel bir konu.
Yorumlarınız için teşekkürler.
Eline emeğine sağlık abi çok güzel bir anlatım olmuş. :helal:
Açıklayıcı, anlaşılabilir bir anlatım olmuş, eline sağlık.
Eline Saglık Basarilar :helal:
Anlatım İcin Tesekurler :helal:
Yararlı.