DUYURU
Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir. Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir. Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir. Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir.
Pzt-Cmt 09:00-18:00
Laravel SQLSTATE Hatası Nasıl Çözülür?
Laravel Rehber

Laravel SQLSTATE Hatası Nasıl Çözülür?

Laravel projelerinde veritabanı işlemleri sırasında karşılaşılan SQLSTATE hataları, özellikle MySQL bağlantısı, migration, tablo ve sütun işlemlerinde oldukça sık görülür. Hatanın tamamına bakmadan yalnızca SQLSTATE ifadesini görmek sorunun kaynağını belirlemek için yeterli değildir.

12 dk okuma · · Güncellendi: · 4 okundu
İçindekiler

Laravel SQLSTATE Hatası Nasıl Çözülür?

Laravel projelerinde veritabanı işlemleri sırasında karşılaşılan SQLSTATE hataları, özellikle MySQL bağlantısı, migration, tablo ve sütun işlemlerinde oldukça sık görülür. Hatanın tamamına bakmadan yalnızca SQLSTATE ifadesini görmek sorunun kaynağını belirlemek için yeterli değildir.

Bu rehberde Laravel'deki yaygın SQLSTATE hatalarını, .env database ayarlarını, MySQL bağlantısını, migration sorunlarını ve cPanel üzerinde yapılabilecek kontrolleri adım adım ele alacağız.

SQLSTATE Hatası Nedir?

SQLSTATE, veritabanı işlemlerindeki hata durumlarını tanımlamak için kullanılan bir hata kodu sistemidir.

Laravel'de örneğin şu şekilde bir hata görebilirsiniz:

SQLSTATE[HY000]

veya:

SQLSTATE[42S02]

Burada önemli olan yalnızca SQLSTATE kelimesi değil, kodun devamında bulunan hata mesajıdır.

Örneğin:

SQLSTATE[HY000] [1045] Access denied for user

ile:

SQLSTATE[42S02]: Base table or view not found

aynı problem değildir.

Laravel SQLSTATE Hatasının Yaygın Nedenleri

En sık karşılaşılan nedenler şunlardır:

  • Database adı yanlış olabilir.
  • MySQL kullanıcı adı yanlış olabilir.
  • Database şifresi yanlış olabilir.
  • Database host bilgisi yanlış olabilir.
  • MySQL kullanıcısının database üzerinde yetkisi olmayabilir.
  • İlgili tablo bulunmuyor olabilir.
  • Sütun adı yanlış olabilir.
  • Migration çalıştırılmamış olabilir.
  • Foreign key problemi olabilir.
  • SQL sorgusunda syntax problemi olabilir.
  • Laravel eski .env ayarlarını kullanıyor olabilir.
  • Database bağlantı cache'i güncellenmemiş olabilir.

1. Önce Hata Kodunun Tamamını Okuyun

Örneğin:

SQLSTATE[HY000] [1045] Access denied for user

Buradaki 1045 database kimlik doğrulama problemi hakkında önemli bilgi verir.

Başka bir örnek:

SQLSTATE[42S02]: Base table or view not found

Bu durumda Laravel'in erişmeye çalıştığı tablo bulunamıyor olabilir.

Dolayısıyla:

SQLSTATE hatası tek bir hata değildir.

Hatanın tamamını okumak gerekir.

2. .env Database Ayarlarını Kontrol Edin

Laravel'in database bağlantısı genellikle .env dosyasından yapılandırılır.

Örneğin:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=veritabani_adi
DB_USERNAME=veritabani_kullanici
DB_PASSWORD=sifre

Buradaki değerlerin cPanel veya hosting panelinizdeki gerçek database bilgileriyle aynı olduğundan emin olun.

Özellikle cPanel'de database ve kullanıcı adlarının başına hesap kullanıcı adının eklenmesi gerekebilir.

Örneğin:

DB_DATABASE=hesap_magaza
DB_USERNAME=hesap_magazauser

3. DB_HOST Yanlışsa SQLSTATE Hatası Alabilirsiniz

En yaygın kullanım:

DB_HOST=127.0.0.1

veya:

DB_HOST=localhost

şeklindedir.

Ancak hosting sağlayıcınız farklı bir database host bilgisi kullanıyorsa hosting panelindeki doğru değer kullanılmalıdır.

Bu nedenle DB_HOST değerini varsayarak değiştirmek yerine hosting yapılandırmasını kontrol edin.

4. Database Kullanıcısının Yetkilerini Kontrol Edin

cPanel'de database oluşturmak tek başına yeterli olmayabilir.

MySQL kullanıcısının ilgili database'e atanması ve gerekli izinlere sahip olması gerekir.

cPanel'deki MySQL Databases bölümünden:

  • Database'i
  • Database kullanıcısını
  • Kullanıcının database'e atanıp atanmadığını
  • Gerekli izinleri

kontrol edin.

Örneğin Laravel:

hesap_magaza

database'ine bağlanmaya çalışırken kullanıcı:

hesap_test

database'e atanmadıysa bağlantı veya yetki problemi oluşabilir.

5. SQLSTATE[HY000] [1045] Hatası

Şu hata ile karşılaşırsanız:

SQLSTATE[HY000] [1045] Access denied for user

ilk kontrol edilmesi gerekenler:

DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
DB_HOST=
DB_PORT=

Özellikle kullanıcı adı ve şifreyi kontrol edin.

Ardından Laravel cache'ini temizleyin:

php artisan optimize:clear

Sonra tekrar deneyin.

6. SQLSTATE[HY000] [1044] Hatası

Örneğin:

SQLSTATE[HY000] [1044] Access denied for user

gibi bir hata database'e erişim yetkisiyle ilgili olabilir.

Bu durumda cPanel'de MySQL kullanıcısının ilgili database'e atanıp atanmadığını kontrol edin.

7. SQLSTATE[42S02] Tablo Bulunamadı Hatası

Örneğin:

SQLSTATE[42S02]: Base table or view not found

hatası alıyorsanız Laravel'in sorguladığı tablo database içerisinde bulunmuyor olabilir.

Örneğin uygulama:

select * from products

çalıştırıyor fakat database içerisinde:

products

tablosu bulunmuyorsa bu hata ortaya çıkabilir.

Öncelikle migration'ları kontrol edin:

php artisan migrate:status

8. Migration Çalıştırılmamış Olabilir

Yeni Laravel projesini sunucuya yüklediyseniz migration'lar çalıştırılmamış olabilir.

Kontrol:

php artisan migrate:status

Gerekliyse:

php artisan migrate

çalıştırılabilir.

Production ortamında migration çalıştırmadan önce mevcut database yapısını ve yedekleri kontrol etmek önemlidir.

9. SQLSTATE[42S22] Column Not Found

Şu hatayı görüyorsanız:

SQLSTATE[42S22]: Column not found

Laravel sorgusunda kullanılan sütun database'de bulunmuyor olabilir.

Örneğin kod:

User::where('phone_number', $phone)->get();

çalıştırıyor ancak users tablosunda:

phone_number

sütunu yoksa hata oluşabilir.

Bu durumda migration ve database yapısını karşılaştırın.

10. Migration Dosyanızı Kontrol Edin

Örneğin migration içerisinde:

$table->string('phone_number');

tanımlanmış olabilir.

Ama migration sunucuda çalıştırılmamışsa gerçek database'de sütun bulunmayabilir.

Kontrol:

php artisan migrate:status

Migration'ın durumunu buradan inceleyebilirsiniz.

11. Foreign Key SQLSTATE Hataları

Migration sırasında:

SQLSTATE

ile başlayan foreign key hataları da görülebilir.

Örneğin:

$table->foreignId('category_id')
      ->constrained();

kullanıyorsanız ilgili tablo ve sütun yapısının doğru olması gerekir.

Özellikle:

  • Tablo isimleri
  • Primary key
  • Foreign key
  • Veri tipleri
  • Migration sırası

kontrol edilmelidir.

12. Migration Sırası Önemlidir

Örneğin:

categories
products

tablolarınız varsa ve products tablosu categories tablosuna foreign key ile bağlıysa, ilgili tabloların oluşturulma sırasının doğru olması gerekir.

Aksi halde migration sırasında foreign key kaynaklı SQLSTATE hatası ortaya çıkabilir.

13. Laravel Cache Nedeniyle Eski Database Ayarı Kullanılıyor Olabilir

.env dosyanızı değiştirdiniz ancak Laravel hâlâ eski database bilgilerini kullanıyorsa config cache aktif olabilir.

Şunu çalıştırın:

php artisan optimize:clear

Ardından uygulamayı tekrar test edin.

Gerekirse:

php artisan config:cache

ile production config cache'i yeniden oluşturulabilir.

14. Database Bağlantısını Laravel Üzerinden Kontrol Edin

Laravel'in database bağlantısını test etmek için:

php artisan migrate:status

komutunu çalıştırabilirsiniz.

Laravel database'e erişebiliyorsa migration durumunu görüntüleyebilir.

Database bağlantısı kurulamazsa burada ilgili bağlantı hatasını görebilirsiniz.

15. MySQL Database'e Manuel Bağlantı Testi

Sunucuda MySQL erişiminiz varsa database bilgilerini ayrıca test edebilirsiniz.

Örneğin:

mysql -u KULLANICI -p

Şifre istendiğinde database kullanıcı şifrenizi girebilirsiniz.

Ancak hosting ortamlarında MySQL CLI erişimi olmayabilir. Bu durumda cPanel phpMyAdmin üzerinden database ve tabloları kontrol edebilirsiniz.

16. phpMyAdmin ile Tablo Kontrolü

SQLSTATE:

 
42S02

gibi bir tablo bulunamadı hatası veriyorsa phpMyAdmin'e girip ilgili database'i açın.

Örneğin Laravel:

orders
products
users
categories

tablolarından birine erişmeye çalışıyorsa ilgili tablonun gerçekten mevcut olup olmadığını kontrol edin.

17. SQLSTATE[23000] Integrity Constraint Violation

Örneğin:

SQLSTATE[23000]: Integrity constraint violation

hatası alabilirsiniz.

Bu hata grubunda foreign key, unique constraint veya başka bir database kısıtlaması ihlal edilmiş olabilir.

Örneğin:

Duplicate entry

mesajı varsa unique bir alana aynı değerin tekrar eklenmeye çalışılması söz konusu olabilir.

18. Duplicate Entry Hatası

Örneğin:

SQLSTATE[23000]: Integrity constraint violation:
1062 Duplicate entry

hatası görüyorsanız database'de unique olarak tanımlanmış bir değerin tekrar eklenmeye çalışıldığı anlamına gelebilir.

Örneğin:

email

alanı unique ise aynı email adresinin ikinci kez eklenmesi hata oluşturabilir.

Kod tarafında kayıt öncesi kontrol yapılabilir:

$request->validate([
    'email' => 'required|email|unique:users,email',
]);

19. SQLSTATE Hatalarını Loglardan İnceleyin

Laravel hata loglarını:

storage/logs/laravel.log

içerisinde bulabilirsiniz.

Terminal üzerinden:

tail -n 100 storage/logs/laravel.log

ile son log kayıtlarını inceleyebilirsiniz.

Hatanın gerçek sebebi çoğu zaman log içerisinde daha ayrıntılı şekilde görülür.

20. Production Ortamında APP_DEBUG

Development ortamında hatanın detaylarını görmek faydalı olabilir.

Ancak canlı production sitesinde:

APP_DEBUG=false

kullanılması gerekir.

Hata ayrıntılarını herkese açık şekilde göstermek yerine Laravel loglarını incelemek daha güvenlidir.

Laravel SQLSTATE Hata Kodları

Hata Genel anlamı
HY000 Genel database/bağlantı hataları
1045 Kullanıcı doğrulama/yetki problemi
1044 Database erişim yetkisi problemi
42S02 Tablo veya view bulunamadı
42S22 Sütun bulunamadı
23000 Integrity constraint problemi
1062 Duplicate entry
1215 Foreign key oluşturma problemi
2002 MySQL bağlantı problemi

Burada kodun yanında bulunan tam hata mesajını da değerlendirmek gerekir. Aynı SQLSTATE sınıfı altında farklı nedenler bulunabilir.

Laravel SQLSTATE İçin Hızlı Çözüm Sırası

Sorunu hızlıca teşhis etmek için şu sırayla ilerleyin:

php artisan optimize:clear

Ardından:

php artisan migrate:status

Sonra .env dosyasını kontrol edin:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=veritabani
DB_USERNAME=kullanici
DB_PASSWORD=sifre

Database bilgileri doğruysa phpMyAdmin üzerinden tabloları kontrol edin.

Son olarak:

tail -n 100 storage/logs/laravel.log
 

ile Laravel loglarını inceleyin.

cPanel Laravel SQLSTATE Kontrol Listesi

cPanel'de Laravel SQLSTATE hatası aldığınızda:

[ ] .env mevcut mu?
[ ] DB_DATABASE doğru mu?
[ ] DB_USERNAME doğru mu?
[ ] DB_PASSWORD doğru mu?
[ ] DB_HOST doğru mu?
[ ] DB_PORT doğru mu?
[ ] MySQL kullanıcısı database'e atanmış mı?
[ ] Database tabloları mevcut mu?
[ ] Migration'lar çalıştırılmış mı?
[ ] Laravel config cache temizlenmiş mi?
[ ] storage/logs/laravel.log kontrol edildi mi?

Bu kontroller çoğu database kaynaklı problemin nereden çıktığını belirlemeye yardımcı olur.

Sık Sorulan Sorular — 20 S.S.S.

1. Laravel SQLSTATE hatası nedir?
Laravel'in database işlemi sırasında aldığı SQL/database kaynaklı hata kodlarının genel adıdır. Tam hata mesajı incelenmelidir.

2. Laravel SQLSTATE[HY000] hatası nasıl çözülür?
Öncelikle .env database bilgilerini, MySQL kullanıcı yetkilerini ve database bağlantısını kontrol edin.

3. SQLSTATE[HY000] [1045] ne demek?
Genellikle MySQL kullanıcı doğrulaması veya kullanıcı bilgilerinin hatalı olmasıyla ilişkilidir.

4. SQLSTATE[42S02] hatası nedir?
Laravel'in erişmeye çalıştığı tablo veya view database içerisinde bulunamadığında görülebilir.

5. SQLSTATE[42S22] hatası nedir?
Sorguda kullanılan sütunun database tablosunda bulunamadığını gösterebilir.

6. Laravel SQLSTATE 23000 hatası neden olur?
Foreign key, unique constraint veya başka bir database kısıtlamasının ihlal edilmesiyle oluşabilir.

7. Laravel SQLSTATE Duplicate Entry hatası nasıl çözülür?
Aynı değerin unique olarak tanımlanmış bir alana tekrar eklenip eklenmediğini kontrol edin.

8. Laravel database bağlantısı neden çalışmıyor?
.env içerisindeki database adı, kullanıcı adı, şifre, host ve port bilgilerinden biri yanlış olabilir.

9. Laravel .env database değişikliklerini neden görmüyor?
Config cache nedeniyle eski ayarlar kullanılıyor olabilir. php artisan optimize:clear çalıştırılabilir.

10. Laravel migration çalışmıyorsa SQLSTATE neden oluşur?
Migration içerisinde foreign key, tablo, sütun, veri tipi veya migration sırası kaynaklı bir problem olabilir.

11. Laravel migration durumunu nasıl kontrol ederim?
Şu komutu kullanabilirsiniz:

php artisan migrate:status

12. Laravel SQLSTATE hatası cPanel'de neden çıkar?
Database bilgilerinin yanlış olması, kullanıcı yetkilerinin eksik olması veya migration'ların çalıştırılmamış olması gibi nedenler olabilir.

13. DB_HOST Laravel'de ne olmalı?
Sunucu yapılandırmasına bağlıdır. Yaygın değerler 127.0.0.1 veya localhost olsa da hosting sağlayıcısının verdiği değer esas alınmalıdır.

14. Laravel SQLSTATE hatası phpMyAdmin'den çözülebilir mi?
Bazı database yapılandırması, tablo veya sütun problemleri phpMyAdmin üzerinden kontrol edilebilir; ancak uygulama kodundaki hatalar Laravel tarafında düzeltilmelidir.

15. Laravel SQLSTATE 1044 hatası nedir?
Database kullanıcısının ilgili database'e erişim yetkisinin bulunmamasıyla ilişkili olabilir.

16. Laravel SQLSTATE 2002 hatası nedir?
MySQL server'a bağlantı kurulamadığını gösterebilir. DB_HOST, MySQL servis durumu ve bağlantı ayarları kontrol edilmelidir.

17. Laravel SQLSTATE hatası loglarda nerede bulunur?
Genellikle:

storage/logs/laravel.log

dosyasında bulunur.

18. Laravel SQLSTATE hatasında APP_DEBUG açılmalı mı?
Development ortamında hata teşhisi için kullanılabilir. Production ortamında APP_DEBUG=false bırakılması daha güvenlidir.

19. Laravel SQLSTATE hatasını en hızlı nasıl teşhis ederim?
Önce tam hata kodunu okuyun, .env database ayarlarını kontrol edin, php artisan migrate:status çalıştırın ve Laravel loglarını inceleyin.

20. Laravel SQLSTATE hatalarının tamamı database bağlantısından mı kaynaklanır?
Hayır. SQLSTATE hataları bağlantı problemlerinin yanı sıra tablo, sütun, migration, foreign key, unique constraint ve SQL sorgusu gibi farklı nedenlerden kaynaklanabilir.

Sonuç

Laravel SQLSTATE hatalarında en önemli nokta yalnızca SQLSTATE ifadesine bakmak yerine tam hata kodunu ve devamındaki açıklamayı okumaktır.

Örneğin:

SQLSTATE[HY000] [1045]

ile:

SQLSTATE[42S02]

farklı problemlere işaret eder.

İlk olarak .env database ayarlarını, MySQL kullanıcı yetkilerini ve migration durumunu kontrol edin:

php artisan optimize:clear
php artisan migrate:status

Ardından Laravel loglarını:

tail -n 100 storage/logs/laravel.log

ile inceleyin.

Bu şekilde SQLSTATE hatasının bağlantı mı, yetki mi, migration mı, tablo mu, sütun mu yoksa constraint problemi mi olduğunu çok daha hızlı belirleyebilirsiniz.

KONUNUZLA İLGİLİ ÖNERİ

Whois Sorgula

Alan adı sahipliği, yenileme tarihi ve DNS bilgilerini ücretsiz sorgulayın.

Abdulkerim Evren
EPİK Yazılım Editör Ekibi

Web tasarım, SEO ve hosting üzerine 7+ yıl deneyimli, kurumsal projelere odaklanan içerik yazarı.

0.0 / 5 · 0 oy
Bu yazı faydalı oldu mu?
Hemen Arayın0552 291 08 91
Bize Yazıninfo@epikyazilim.com
Havale/EFT sonrasıÖdeme Bildirimi Yap
Rehber & CevaplarBilgi Bankası
Instagram WhatsApp