Hatanızın neden kaynaklandığını anlamak için verdiğiniz kodu inceledim. PDOException: SQLSTATE[HY093] hatası, genellikle yer tutucuların ve bağlanan değişkenlerin sayısının uyuşmamasından kaynaklanır. Kodunuzda bu duruma yol açacak bir sorun görünmüyor, ancak birkaç noktayı kontrol etmenizde fayda var:
- Veritabanı Bağlantısı: config.php dosyasındaki veritabanı bağlantısını kontrol edin. $db değişkeninin doğru bir şekilde tanımlandığından ve bağlantının sağlandığından emin olun.
- Sorgu Parametreleri: Aşağıdaki sorguda :id parametresini 0 olarak gönderiyorsunuz. Veritabanında ayar tablosunda bu ayar_id'ye sahip bir kayıt olup olmadığını kontrol edin. Eğer 0 ID'sine sahip bir kayıt yoksa, bu da fetch işleminin boş döneceği anlamına gelir.
- Error Handling: catch bloklarındaki hata mesajları, hatayı daha iyi anlamanızı sağlayabilir. Örneğin, catch (PDOException $e) kısmında $query değişkeni eğer tanımlanmadıysa bir hata verebilir. Dolayısıyla, sorgunun doğru bir şekilde çalıştığından emin olun.
- Debugging: Hata ayıklama yaparak, queryString'i yazdırmak yerine, $query->errorInfo() ile daha ayrıntılı bir hata bilgisi alabilirsiniz.
<?php
ob_start();
session_start();
date_default_timezone_set('Europe/Istanbul');
// Genel site ayarlarını veritabanından çekme
try {
include 'trex/controller/config.php'; // config.php'nin burada olduğundan emin olun
$query = $db->prepare("SELECT * FROM ayar WHERE ayar_id = :id");
$query->execute([':id' => 0]); // Parametre olarak 0 gönderiyoruz
$settingsprint = $query->fetch(PDO::FETCH_ASSOC);
if (!$settingsprint) {
throw new Exception("Ayarlar bulunamadı."); // Ayarların bulunamaması durumunda hata fırlatıyoruz
}
} catch (PDOException $e) {
echo "Ayarlar yüklenemedi: " . $e->getMessage(); // Hata mesajını gösteriyoruz
echo "<br>Hata Bilgisi: " . implode(", ", $query->errorInfo()); // Daha fazla hata bilgisi
} catch (Exception $e) {
echo $e->getMessage();
}