C’de Parametre Kullanarak Veri Ekleme
C programlama dilinde, veritabanlarına veri eklemek için parametre kullanmak, SQL enjeksiyon saldırılarını önlemenin ve kodun okunabilirliğini ve bakımını iyileştirmenin önemli bir yoludur. Bu makale, C’de parametre kullanarak veri eklemeyi ayrıntılı olarak açıklayacaktır.
Parametre Kullanmanın Faydaları
Parametre kullanmanın veri ekleme işlemleri için aşağıdaki faydaları vardır:
- SQL Enjeksiyon Saldırılarını Önler: Parametreler, kullanıcı tarafından sağlanan verileri sorguya güvenli bir şekilde ekler ve SQL enjeksiyon saldırılarını önler.
- Okunabilirliği ve Bakımı İyileştirir: Parametreler, sorguları daha okunabilir ve anlaşılır hale getirir, bu da kodun bakımını kolaylaştırır.
- Performansı Artırır: Parametreler, veritabanı sunucusunun sorguyu daha verimli bir şekilde işlemesine olanak tanır, bu da performansı artırır.
Parametre Kullanarak Veri Ekleme
C’de parametre kullanarak veri eklemek için aşağıdaki adımları izleyin:
- Veritabanı Bağlantısı Oluşturun: Veritabanına bağlanmak için
mysql_connect()
veyamysqli_connect()
fonksiyonlarını kullanın. - Hazırlanmış Bir İfade Oluşturun: Parametreli bir sorguyu temsil eden bir hazırlanmış ifade oluşturmak için
mysql_prepare()
veyamysqli_prepare()
fonksiyonlarını kullanın. - Parametreleri Bağlayın: Hazırlanmış ifadeye parametreleri bağlamak için
mysql_stmt_bind_param()
veyamysqli_stmt_bind_param()
fonksiyonlarını kullanın. - Hazırlanmış İfadeyi Yürütün: Hazırlanmış ifadeyi yürütmek için
mysql_stmt_execute()
veyamysqli_stmt_execute()
fonksiyonlarını kullanın. - Veritabanı Bağlantısını Kapatın: Veritabanı bağlantısını kapatmak için
mysql_close()
veyamysqli_close()
fonksiyonlarını kullanın.
Örnek Kod
Aşağıdaki C kodu, parametre kullanarak bir veritabanına veri eklemeyi göstermektedir:
“`c
include
include
include
int main() {
// Veritabanı bağlantısı bilgileri
const char hostname = “localhost”;
const char username = “root”;
const char password = “”;
const char database = “test”;
// Veritabanına bağlan
MYSQL *conn = mysql_init(NULL);
if (!mysql_real_connect(conn, hostname, username, password, database, 0, NULL, 0)) {
fprintf(stderr, “Veritabanına bağlanılamadı: %s\n”, mysql_error(conn));
mysql_close(conn);
return EXIT_FAILURE;
}
// Hazırlanmış ifade oluştur
const char query = “INSERT INTO kullanicilar (ad, soyad, email) VALUES (?, ?, ?)”;
MYSQL_STMT stmt = mysql_stmt_init(conn);
if (!mysql_stmt_prepare(stmt, query, strlen(query))) {
fprintf(stderr, “Hazırlanmış ifade oluşturulamadı: %s\n”, mysql_stmt_error(stmt));
mysql_stmt_close(stmt);
mysql_close(conn);
return EXIT_FAILURE;
}
// Parametreleri bağla
MYSQL_BIND bind[3];
memset(bind, 0, sizeof(bind));
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = “John”;
bind[0].buffer_length = strlen(“John”);
bind[1].buffer_type = MYSQL_TYPE_STRING;
bind[1].buffer = “Doe”;
bind[1].buffer_length = strlen(“Doe”);
bind[2].buffer_type = MYSQL_TYPE_STRING;
bind[2].buffer = “[email protected]”;
bind[2].buffer_length = strlen(“[email protected]”);
if (mysql_stmt_bind_param(stmt, bind)) {
fprintf(stderr, “Parametreler bağlanamadı: %s\n”, mysql_stmt_error(stmt));
mysql_stmt_close(stmt);
mysql_close(conn);
return EXIT_FAILURE;
}
// Hazırlanmış ifadeyi yürüt
if (mysql_stmt_execute(stmt)) {
fprintf(stderr, “Hazırlanmış ifade yürütülemedi: %s\n”, mysql_stmt_error(stmt));
mysql_stmt_close(stmt);
mysql_close(conn);
return EXIT_FAILURE;
}
// Veritabanı bağlantısını kapat
mysql_stmt_close(stmt);
mysql_close(conn);
return EXIT_SUCCESS;
}
“`