autolas adlı üyeden alıntı
Sadece bu harflerde ( ı_ş_ğ ) ( I_İ_Ş_Ğ ) küçük büyük harflerde hata veriyor.
Mysql veri tabanı "utf8_turkish_ci" bir çok dillerde test yaptım değişmedi yine seçili verileri metin text dosyasından çekiyor.
İçerik ekleme çekme php dosyasında sorun olduğunu düşünüyorum bazı eklemeler yapmama rağmen sonuç aynı değişmiyor.
<?php
$host = "localhost";
$dbname = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Veritabanı hatasi" . $e->getMessage());
}
$dosyaAdi = "veriler.txt";
try {
$dosya = fopen($dosyaAdi, "r");
while (!feof($dosya)) {
$satir = fgets($dosya);
if (!empty($satir)) {
$stmt = $pdo->prepare("INSERT INTO makale (adi) VALUES (:deger)");
$stmt->bindParam(':deger', $satir);
$stmt->execute();
}
}
fclose($dosya);
echo "eklendi";
} catch (Exception $e) {
echo "eklenmiyor" . $e->getMessage();
}
?>
Veritabanına veri eklerken, karakter seti uyumluluğunu sağlamak için bazı eklemeler yapmanız gerekebilir. Özellikle Türkçe karakterlerin doğru bir şekilde veritabanına eklenmesi için SET NAMES
sorgusunu kullanabilirsiniz. Ayrıca, PDO
bağlantısı oluştururken karakter setini de belirtmeniz faydalı olabilir.
Aşağıdaki gibi güncellenmiş bir kod örneği verilebilir:
<?php
$host = "localhost";
$dbname = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Karakter setini UTF-8 olarak belirtiyoruz.
$pdo->exec("SET NAMES 'utf8mb4'");
} catch (PDOException $e) {
die("Veritabanı hatasi" . $e->getMessage());
}
$dosyaAdi = "veriler.txt";
try {
$dosya = fopen($dosyaAdi, "r");
while (!feof($dosya)) {
$satir = fgets($dosya);
if (!empty($satir)) {
$stmt = $pdo->prepare("INSERT INTO makale (adi) VALUES (:deger)");
// Türkçe karakterlerin doğru işlenmesi için 'UTF-8' olarak belirtiyoruz.
$stmt->bindValue(':deger', $satir, PDO::PARAM_STR);
$stmt->execute();
}
}
fclose($dosya);
echo "eklendi";
} catch (Exception $e) {
echo "eklenmiyor" . $e->getMessage();
}
?>
Bu örnek, charset=utf8mb4
ile karakter setini belirtir ve SET NAMES 'utf8mb4'
ile karakter setini bağlantı üzerinden ayarlar. Ayrıca PDO::PARAM_STR
ile Türkçe karakterleri içeren metni bind ederken karakter tipini belirtiyoruz.
Kodunuzda bu değişiklikleri yaparak Türkçe karakterleri içeren metinleri doğru şekilde veritabanınıza ekleyebilirsiniz