• 26-04-2022, 09:09:53
    #1
    Merhaba arkadaşlar,

    Aşağıdaki sql sorgumda Incorrect DATE hatası alıyorum, ne yaptıysam sorunu çözemedim. Çözüm için önerisi olan arkadaşlar yardımcı olabilirse sevinirim.

    Sorgum:

    $d_query = $db->query("SELECT personel_isim,SUM(toplam_hasar) as maliyet,SUM(i_tutar) as iscilik,SUM(p_tutar) as parca,SUM(FLOOR(DATEDIFF(duzenleme,zaman))) AS fark,SUM(FLOOR(DATEDIFF(on_bilgi,zaman))) AS ob_fark,COUNT(*) AS id,COUNT(IF(ssekli = '1', 1, NULL)) AS kasko,COUNT(IF(ssekli = '2', 1, NULL)) AS trafik,COUNT(IF(durum = '0', 1, NULL)) AS acik,COUNT(IF(durum = '2', 1, NULL)) AS kapali,COUNT(IF(on_bilgi != '', 1, NULL)) AS ob_acik FROM dosya $sartlar group by personel_isim", PDO::FETCH_ASSOC);
    Aldığım hata:

    Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1525 Incorrect DATE value: '' in /home/avrupaek/public_html/hasar/kp/istatistik.php:287 Stack trace: #0 /home/avrupaek/public_html/hasar/kp/istatistik.php(287): PDO->query('SELECT personel...', 2) #1 {main} thrown in /home/avrupaek/public_html/hasar/kp/istatistik.php on line 287
    SET SQL_MODE='ALLOW_INVALID_DATES';
    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_DATE',''));
    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_IN_DATE',''));

    bu ayarlar tarafımdan yapılmış olup sorunu gidermemiştir..

    Şimdiden teşekkürler..
  • 26-04-2022, 09:22:29
    #2
    O ayarlar bildiğim kadarıyla yeni veri girişleri için geçerli var olan veriler için değil. Genellikle varsayılan tanımlamalarda kullanılır.

    DATEDIFF yaptığınız sütunda bulunan değer istenilen tarih formatında değil gibi görünüyor.

    Tablo yapınızı atmanız daha sağlıklı olur ayrıca değişkenle sorguya dahil ettiniz başka kodlarda var ordan kaynaklanıyorsa onu anlamamız mümkün değil.
  • 26-04-2022, 10:11:42
    #3
    Öncelikle vakit ayırdığınız için teşekkür ederim.

    $sartlar değişkeni aşağıdaki koddan geliyor:

    if(!empty($yeni_bas_trh) or !empty($yeni_bit_trh))    { if ($tarih_secimi == 2) { $kosul[] = "(duzenleme between '$yeni_bas_trh' and '$yeni_bit_trh')"; } else { $kosul[] = "(zaman between '$yeni_bas_trh' and '$yeni_bit_trh')"; } }
    if(!empty($dosya_durumu))                            { $kosul[] = "durum LIKE '%$dosya_durumu%'"; }
    if(!empty($tur))                                    { $kosul[] = "cinsi IN ($tur)"; }
    if(!empty($statu))                                    { $kosul[] = "statu NOT IN ($statu)"; }
    if(!empty($s_sekli))                                { $kosul[] = "ssekli LIKE '%$s_sekli%'"; }  
    if(!empty($tip))                                    { $kosul[] = "arac_gurubu_adi LIKE '%$tip%'"; }
    if(!empty($sigorta))                                { $kosul[] = "sigorta_ad LIKE '%$sigorta%'"; }
    if(!empty($eksper))                                    { $kosul[] = "eksper_adi LIKE '%$eksper%'"; }
    if(!empty($servis))                                    { $kosul[] = "srv_sabit_tel LIKE '%$servis%'"; }
    if(!empty($sorumlu))                                { $kosul[] = "personel_isim LIKE '%$sorumlu%'"; }
    if(!empty($marka))                                    { $kosul[] = "marka LIKE '%$marka%'"; }
    if(!empty($hasar_ust) AND $hasar_alt == "20000")    { $kosul[] = "(toplam_hasar BETWEEN '$hasar_alt' AND '1000000')"; }
    if(!empty($hasar_ust) AND $hasar_alt >= 0)            { $kosul[] = "(toplam_hasar BETWEEN '$hasar_alt' AND '$hasar_ust')"; }
    
    if(is_array($kosul)){  
    $sartlar = " WHERE ".implode(' AND ',$kosul);  
    }else{  
    $sartlar = "";  
    }
    duzenleme ve zaman tablo yapısı aşağıdaki gibi:


    bu arada bu kodlar mariadb 10 sürümünde sorunsuz çalışıyor, mysql 8 de sıkıntı yaşıyorum..

    tekrar teşekkürler..
  • 26-04-2022, 11:22:16
    #4
    Mysql 8 de çalışmamasının nedeni sql_mode dan kaynaklanıyor gibi duruyor. Bu ayarı yaptığınızı söylüyorsunuz ama my.cnf dosyasında bunu uyguladınızmı?

    Phpmyadminden sql_modeye bakmanızı öneririm.
  • 26-04-2022, 18:10:19
    #5
    Sorun aşağıdaki sorgudan kaynaklanıyormuş

    COUNT(IF(on_bilgi != '', 1, NULL)) AS ob_acik
    boş tarih değerini boş bıraktığımdan hata veriyormuş ki mariadb de vermiyor bu hatayı.. aşağıdaki gibi değiştirince düzeldi

    COUNT(IF(on_bilgi != '0000-00-00', 1, NULL)) AS ob_acik
    Vakit ayırdığınız için tekrar teşekkürler..