0Pricing
Go Academy · Ders

Hazırlanmış İfadeler

Parametreli sorguları çalıştırın

Hazırlanmış İfadeler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Hazırlanmış ifade nedir

Hazırlanmış ifade, SQL metnini ayrıştırılıp planlanması için veritabanına bir kez gönderir, ardından farklı parametrelerle birçok kez çalıştırır. Tekrarlanan sorgularda daha hızlıdır ve enjeksiyona karşı daha güvenlidir.

Parametre yer tutucuları

Kullanıcı girdisini birleştirerek SQL oluşturmayın. Sürücünün değerleri ayrı göndermesi için yer tutucular kullanın. PostgreSQL $1, $2 kullanır; MySQL ve SQLite ise ? kullanır.

SELECT * FROM users WHERE age > $1 AND city = $2

Bu enjeksiyonu neden önler

Parametreler SQL metninden ayrı taşındığı için veritabanı onları kesinlikle veri olarak ele alır, hiçbir zaman kod olarak değerlendirmez. " OR 1=1 gibi kötü amaçlı bir değer, çalıştırılabilir SQL değil, değişmez bir dize olur.

db.Prepare

Prepare, havuza bağlı bir *sql.Stmt döndürür. Ardından bağımsız değişkenlerle ifade üzerinde Exec veya Query çağrısı yaparsınız.

stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES($1, $2)")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()

İfadeyi çalıştırma

Her yer tutucu için bağımsız değişkenleri stmt.Exec çağrısına geçirin. Ekleme ve güncelleme işlemlerinde Exec, etkilenen satır sayısını ve son ekleme kimliğini içeren bir sql.Result döndürür.

res, err := stmt.Exec("Ada", 36)
if err != nil {
    log.Fatal(err)
}
n, _ := res.RowsAffected()
fmt.Println("inserted", n)

Döngüde yeniden kullanma

Kazanım yeniden kullanımdan gelir: ifadeyi bir kez hazırlayın, döngü içinde birçok kez çalıştırın. Veritabanı, her çağrıda ayrıştırılmış planını yeniden kullanır.

for _, u := range users {
    if _, err := stmt.Exec(u.Name, u.Age); err != nil {
        log.Fatal(err)
    }
}

Örtük hazırlama

db.Query veya db.Exec çağrılarına doğrudan bağımsız değişken geçirmek de yer tutucuları güvenle kullanır; sürücü hazırlama işlemini arka planda gerçekleştirebilir. Açıkça Prepare kullanmak özellikle tekrarlanan çalıştırmalar için önemlidir.

Çalıştırılabilir Parametre Bağlama Benzetimi

Gerçek hazırlanmış ifadeler bir veritabanı gerektirir. Bu çalıştırılabilir örnek, değerlerin sorgu metninden ayrı tutulduğunu göstermek için güvenli parametre bağlamayı benzetir.

package main

import "fmt"

func execPrepared(query string, args ...interface{}) string {
    return fmt.Sprintf("EXEC %q with args %v", query, args)
}

func main() {
    q := "INSERT INTO users(name, age) VALUES($1, $2)"
    people := [][2]interface{}{{"Ada", 36}, {"Lin", 41}}
    for _, p := range people {
        fmt.Println(execPrepared(q, p[0], p[1]))
    }
}

Bağlam Seçenekleri

Hazırlanmış çağrıların, database/sql'ın geri kalanında olduğu gibi zaman aşımlarına ve iptale uymasını sağlamak için PrepareContext ve stmt.ExecContext kullanın.

Stmt'yi Her Zaman Kapatın

Bir *sql.Stmt, veritabanında kaynakları tutar. İşiniz bittiğinde stmt.Close() çağrısını erteleyin. İfadeleri kapatmadan bırakmak, sunucu tarafındaki hazırlanmış ifade sınırlarının tükenmesine neden olabilir.

İfadeler ve Bağlantı Havuzu

*sql.DB üzerinde hazırlanan bir ifade, havuzdaki bağlantılarla çalışır; kütüphane, ifade hangi bağlantıya denk gelirse o bağlantı üzerinde yeniden hazırlar. Genellikle bunu kendiniz yönetmeniz gerekmez.

Hızlı Kontrol

Hazırlanmış ifadeler hakkındaki bilginizi sınayın.

Özet

Hazırlanmış ifadeleri öğrendiniz:

  • Prepare bir kez ayrıştırır, birçok kez yürütür
  • Yer tutucular ($1 veya ?) değerleri veri olarak tutarak enjeksiyonu önler
  • stmt.Exec etkilenen satırları döndürür; stmt.Close() çağrısını erteleyin
  • Döngülerde yeniden kullanın; son tarihler için Context seçeneklerini kullanın

Sıkça Sorulan Sorular

“Hazırlanmış İfadeler” dersi ücretsiz mi?

Evet — “Hazırlanmış İfadeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Hazırlanmış İfadeler” dersinde ne öğreneceğim?

Parametreli sorguları çalıştırın Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Hazırlanmış İfadeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bağlantı Açma
  2. Satırları Sorgulama
  3. Hazırlanmış İfadeler
  4. İşlemler
← Go Academy Sayfasına Dön