- Konu sahibi
- #1
PHP veritabanına bağlanamıyorsa önce gerçek hata mesajını güvenli bir yerden alın; ardından bağlantı adresini, veritabanı adını, kullanıcı bilgilerini, yetkileri ve kullanılan PHP sürücüsünü hatanın işaret ettiği sırayla doğrulayın. Sorun genellikle yanlış bağlantı bilgisi, erişilemeyen sunucu veya eksik sürücü düzeltildiğinde giderilir; hangi düzeltmenin gerektiğini hata mesajı belirler.
Uygulamanın özel hata günlüğünü veya barındırma ortamının PHP hata kayıtlarını açın ve başarısız isteğin zamanına karşılık gelen mesajı bulun. Ayrıntılı hataları herkese açık sayfada göstermeyin. Mesajlar sunucu adresi, kullanıcı adı veya dosya yolu içerebilir; kayıtları ve paylaşacağınız hata metnini buna göre koruyun.
Uygulamanın veritabanı yapılandırmasında şu bilgileri bulun: sunucu adı, varsa port veya soket yolu, veritabanı adı, kullanıcı adı ve parola. Bunları sağlayıcının verdiği bilgilerle ya da veritabanı yöneticisinin kayıtlarıyla karşılaştırın. Veritabanı ve kullanıcı adlarında hesap öneki kullanılıyorsa tam adları yazın. Yapılandırma birden fazla ortam dosyası kullanıyorsa değişikliği gerçekten çalışan ortamın okuduğu dosyada yapın; kaydedip uygulamayı yeniden deneyin.
Aşağıdaki mesajlar yaygın başlangıç noktalarıdır. Aynı mesajın birden fazla nedeni olabileceğinden ilk olasılık doğrulanmazsa diğerlerini de inceleyin.
Bağlantı reddediliyorsa veya zaman aşımına uğruyorsa veritabanı servisinin çalıştığını, verilen adres ve portu dinlediğini doğrulayın. Uygulama ile veritabanı ayrı sunuculardaysa ağ kuralı ve güvenlik duvarının uygulama sunucusundan bu porta erişime izin verip vermediğini de inceleyin. Konteyner kullanıyorsanız
MySQL için Unix üzerinde
Aşağıdaki örnek MySQL ve PDO içindir; başka bir veritabanında ilgili PDO sürücüsü ve bağlantı biçimi kullanılmalıdır. Tanı dosyasını web üzerinden erişilemeyen, yalnız yetkili kullanıcıların okuyabildiği geçici bir konuma kaydedin. Yer tutucuları gerçek bağlantı bilgileriyle değiştirin;
Uygulama sunucusunda terminal erişiminiz varsa dosyayı
Örnek hata verirse mesajı yukarıdaki durumlarla eşleştirip düzeltmeden sonra yeniden çalıştırın. İşiniz bitince parola içeren geçici dosyayı ve gerekmeyen tanılama çıktısını silin. Sorun sürerse sağlayıcıya veya veritabanı yöneticisine hata zamanı, parolası çıkarılmış hata mesajı, uygulama sunucusu, hedef sunucu ve port bilgilerini iletin; servis erişiminin, ilgili kullanıcının kaynak sunucudan bağlanma izninin ve veritabanı yetkilerinin doğrulanmasını isteyin.
Hata mesajını ve bağlantı ayarlarını bulun
Uygulamanın özel hata günlüğünü veya barındırma ortamının PHP hata kayıtlarını açın ve başarısız isteğin zamanına karşılık gelen mesajı bulun. Ayrıntılı hataları herkese açık sayfada göstermeyin. Mesajlar sunucu adresi, kullanıcı adı veya dosya yolu içerebilir; kayıtları ve paylaşacağınız hata metnini buna göre koruyun.
Uygulamanın veritabanı yapılandırmasında şu bilgileri bulun: sunucu adı, varsa port veya soket yolu, veritabanı adı, kullanıcı adı ve parola. Bunları sağlayıcının verdiği bilgilerle ya da veritabanı yöneticisinin kayıtlarıyla karşılaştırın. Veritabanı ve kullanıcı adlarında hesap öneki kullanılıyorsa tam adları yazın. Yapılandırma birden fazla ortam dosyası kullanıyorsa değişikliği gerçekten çalışan ortamın okuduğu dosyada yapın; kaydedip uygulamayı yeniden deneyin.
Aşağıdaki mesajlar yaygın başlangıç noktalarıdır. Aynı mesajın birden fazla nedeni olabileceğinden ilk olasılık doğrulanmazsa diğerlerini de inceleyin.
| Hata | İlk bakılacak yer |
|---|---|
| Access denied | Kullanıcı, parola, bağlantının geldiği sunucu ve hesap yetkileri |
| Unknown database | Veritabanının tam adı ve doğru sunucuda bulunup bulunmadığı |
| Connection refused veya zaman aşımı | Sunucu, port, servis durumu ve ağ erişimi |
| Could not find driver | Çalışan PHP ortamında ilgili veritabanı sürücüsü |
| No such file or directory | Yerel bağlantıda Unix soket yolu ve servis durumu |
Access denied her zaman yalnızca yanlış parola demek değildir: MySQL hesabı, kullanıcı adıyla birlikte bağlantının geldiği sunucuya göre de değerlendirilir. Kullanıcının hedef veritabanına erişimi olup olmadığını ve hesap için uygulama sunucusundan bağlantıya izin verilip verilmediğini yöneticiden doğrulayın. Parola değiştirildiyse uygulamanın kullandığı yapılandırmayı da güncelleyin. Gerekmeyen geniş yetkiler veya herkese açık ağ erişimi vermek yerine yalnız uygulamanın ihtiyaç duyduğu erişimi tanımlayın.Unknown database alırsanız doğru sunucuya baktığınızdan ve adın önek dâhil tam yazıldığından emin olun. Veritabanı gerçekten yoksa uygulamanın kurulum veya yedekten geri yükleme adımlarına göre oluşturulması gerekir; yalnızca boş bir veritabanı oluşturmak mevcut verileri geri getirmez.Sunucuya ve sürücüye erişimi ayırın
Bağlantı reddediliyorsa veya zaman aşımına uğruyorsa veritabanı servisinin çalıştığını, verilen adres ve portu dinlediğini doğrulayın. Uygulama ile veritabanı ayrı sunuculardaysa ağ kuralı ve güvenlik duvarının uygulama sunucusundan bu porta erişime izin verip vermediğini de inceleyin. Konteyner kullanıyorsanız
localhost genellikle uygulamanın çalıştığı konteyneri gösterir; veritabanının bulunduğu servis için tanımlanmış adresi kullanın.MySQL için Unix üzerinde
localhost soket bağlantısı kullanabilir; 127.0.0.1 ise yerel TCP bağlantısını dener. Soket hatasında sağlayıcının belirttiği soket yolunu ve servisin durumunu kontrol edin. TCP denemesi ancak sunucu TCP dinliyorsa anlamlıdır; ayrıca hesap ve erişim kuralları farklı sonuç verebilir. İki adresi birbirinin her durumda eşdeğeri saymayın.Could not find driver mesajında, kullanılan bağlantı yöntemine uygun eklentiyi çalışan PHP ortamında etkinleştirin. Örneğin PDO ile MySQL bağlantısı için pdo_mysql gerekir. PHP paketini veya eklentiyi kullandığınız sunucu ve PHP sürümüne uygun biçimde kurun ya da etkinleştirin; yapılandırma değişikliği yaptıysanız ilgili PHP servisini yeniden başlatın. Komut satırındaki PHP ile web sunucusunun kullandığı PHP farklı yapılandırmalara sahip olabilir; web uygulamasının çalıştığı ortamı ayrıca doğrulayın.Bağlantıyı küçük bir örnekle sınayın
Aşağıdaki örnek MySQL ve PDO içindir; başka bir veritabanında ilgili PDO sürücüsü ve bağlantı biçimi kullanılmalıdır. Tanı dosyasını web üzerinden erişilemeyen, yalnız yetkili kullanıcıların okuyabildiği geçici bir konuma kaydedin. Yer tutucuları gerçek bağlantı bilgileriyle değiştirin;
3306 yalnızca örnek porttur. Parolayı kaynak kontrolüne göndermeyin.
PHP:
<?php
$host = '127.0.0.1';
$port = 3306;
$database = 'veritabani_adi';
$user = 'veritabani_kullanicisi';
$password = 'parola';
if (!class_exists('PDO')) {
exit("PDO eklentisi yüklü değil.\n");
}
try {
$dsn = "mysql:host=$host;port=$port;dbname=$database;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $password);
echo "Bağlantı başarılı.\n";
} catch (PDOException $e) {
fwrite(STDERR, "Bağlantı hatası: " . $e->getMessage() . "\n");
exit(1);
}
Uygulama sunucusunda terminal erişiminiz varsa dosyayı
php dosya_adi.php komutuyla çalıştırın. Başarı mesajı, bu PHP sürecinin belirtilen bilgilerle bağlantı kurabildiğini gösterir; uygulamanın aynı PHP yapılandırmasını veya aynı bağlantı bilgilerini kullandığını ve tablolar üzerindeki bütün işlemlerin yetkili olduğunu kanıtlamaz. Uygulama hâlâ hata veriyorsa onun okuduğu ayarları ve web ortamındaki sürücüyü karşılaştırın.Örnek hata verirse mesajı yukarıdaki durumlarla eşleştirip düzeltmeden sonra yeniden çalıştırın. İşiniz bitince parola içeren geçici dosyayı ve gerekmeyen tanılama çıktısını silin. Sorun sürerse sağlayıcıya veya veritabanı yöneticisine hata zamanı, parolası çıkarılmış hata mesajı, uygulama sunucusu, hedef sunucu ve port bilgilerini iletin; servis erişiminin, ilgili kullanıcının kaynak sunucudan bağlanma izninin ve veritabanı yetkilerinin doğrulanmasını isteyin.