Giriş yapmadınız.

Duyuru

TÜRKÇE KİTAP DUYURUSU:
Laravel 5 : Laravel 5.1 Güzelliği (Türkçe)
Vue.js 2 : Vue.js 2 Majesteleri (Türkçe)

#1 22.09.2014 09:05:05

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

STMT_PREPARE QueryException hatası ?

Arkadaşlar merhaba

Aşağıdaki gibi bir sorgum var
$feed = Merchantfeed::where('id', '=', $id)->where('m_id', '=', $user_id)->first();

Bu sorgu localde çalışırken sunucuda sorun olup aşağıdaki hata mesajını fırlatıyor
Illuminate \ Database \ QueryException
Error while sending STMT_PREPARE packet. PID=776124 (SQL: select * from `merchantfeeds` where `id` = 32 and `m_id` = 21 limit 1)

Sorgunun hedef aldığı tablo ve sorgu parametrelerini içeren bir tablom var tabloda gelen id ve m_id değerlerini karşılayan bir verim de var sorguyu return edip ekrana bastığımda kayıt doğru olarak dönüyor ancak işlem yapmak istediğimde bu hatayı fırlatıyor

Yardımınız için şimdiden teşekkür ederim

Selam ve dua ile

Çevrimdışı

#2 22.09.2014 11:57:57

MURATSPLAT
Yönetici
Yer: Antalya
Kayıtlı: 06.05.2014
Mesajlar: 642
Website

Yanıt: STMT_PREPARE QueryException hatası ?

$feed = Merchantfeed::where('id', '=', $id)->where('m_id', '=', $user_id)->first()->get():

ile dene.

İşe yaramaz ise hata daki sql sorgusunu mysql konsolunda sorgulat. Bu sayede hatanın tam olarak nereden kaynaklandığını anlarsın.

Çevrimdışı

#3 22.09.2014 12:43:16

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: STMT_PREPARE QueryException hatası ?

MURATSPLAT yazdı:
$feed = Merchantfeed::where('id', '=', $id)->where('m_id', '=', $user_id)->first()->get():

ile dene.

İşe yaramaz ise hata daki sql sorgusunu mysql konsolunda sorgulat. Bu sayede hatanın tam olarak nereden kaynaklandığını anlarsın.

@MURATSPLAT yanıt için teşekkür ederim ancak first ve get methodları aynı ana çalışmaz birini tercih etmek gerekir smile yada geti first ten önce yazmak lazım gelir

ÖtE yandan consolda sorgu sorunsuz dönüyor , ayrıca gelen değişken değerleri de doğru geliyor yani yanlış bir kayıt başvurusu da söz konusu değil işin ilginci bu vb sorgular projenin yüzlerce yerinde sorunsuz çalışıyor ve hatta bunlar çok sıradan sorgular
Hata vermesi bu hatayı fırlatması çok ama çok ilginç bir durum , buraya konu açmadan önce 3 gün bu konuda kafa patlattım tüm interneti  de tardım sayılır ancak bu konuda kalıcı bir çözüm önerisi olmadığı gibi hatayla ilgili google sonuçları da çok az miktarda

Yani sık sık çok insanın karşılaşmadığı bir durum olduğu açık

Burada ricam laravele geçmemde son derece etkili olan  bu forumdaki işin uzmanı kardeşlerimden bu soruna bir göz atmalarını rica ediyorum eğer  bu sorunu burada çözersek google da bu sorunla karşılaşan her kesin yolu muhakkak forumumuza düşecektir , çünkü konu ile alakalı çözüm yok google da

Selam ve dua ile

Son düzenleyen betho (22.09.2014 13:55:04)

Çevrimdışı

#4 22.09.2014 14:02:15

MURATSPLAT
Yönetici
Yer: Antalya
Kayıtlı: 06.05.2014
Mesajlar: 642
Website

Yanıt: STMT_PREPARE QueryException hatası ?

     

        public function testOnlyFist() {
            
                        
            ProCategory::create(['enable' => 1]);
          
            for ($i = 0 ;$i< 50; $i++) {
                
               Product::create(['code' => rand(999, 9999999999999999), 'procategory_id' => 1]);
                
            }
            
            $product = Product::find(1);
            
            $product->CrateNewSlug('test'); 
            
            $product->save();
            
            $this->assertEquals(50, count(Product::all()));
            
            $this->assertEquals(1, count(Product::where('enable', 0)->get()->first())); // geçti
            
            $this->assertEquals(1, count(Product::where('enable', 0)->where('slug', 'test')->first()));  // geçti
            
            $this->assertEquals(1, count(Product::where('enable', 0)->first()));  // geçti
            
            $model =  ProCategory::find(1);
            
            $this->assertEquals(1, count($model->Products()->where('enable',0)->first()));  // geçti
            
            $this->assertEquals(1, count($model->Products()->where('enable',0)->get()->first()));  // geçti
            
}

İlişkilerde kullanırken bir ara get kullanmadan denemiştim. O zaman boş bir class dönüyordu. O günden berri first kullanmadan önce get kullanırım  her zaman.
Dökümantasyona tekrar baktım. Hemen bir test yazdım. Evet hatalı bilgi vermişim. First kullanıldığında get methodu kullanmaya gerek yokmuş. Muhtemelen başka bir hatadan dolayı bu kanıya varmışım.

Teste sizin sorguna benzer bir sorguda da bulundum. Bir hata çıkmadı.

sql sorgusunda sorun  yok ise.  Benzer bir sorguyu diğer modelleriniz deneyin. Hata yoksa muhtemelen sorun yaşadığınız modelde bir şey yanlış tanımlanmıştır.

Çevrimdışı

#5 22.09.2014 14:08:54

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,367
Website

Yanıt: STMT_PREPARE QueryException hatası ?

for ($i = 0 ;$i< 50; $i++) {
    
   Product::create(['code' => rand(999, 9999999999999999), 'procategory_id' => 1]);
    
}

yerine

for ($i = 0 ;$i< 50; $i++)
{
	$products[] = ['code' => rand(999, 9999999999999999), 'procategory_id' => 1];
}

Product::create($products);

Kullanımı ile sql sorgularınızdan 49 tane tasarruf edebilirsiniz wink
Denemedim ancak muhtemelen çalışacaktır.

Çevrimdışı

#6 22.09.2014 14:33:53

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: STMT_PREPARE QueryException hatası ?

MURATSPLAT yazdı:
     

        public function testOnlyFist() {
            
                        
            ProCategory::create(['enable' => 1]);
          
            for ($i = 0 ;$i< 50; $i++) {
                
               Product::create(['code' => rand(999, 9999999999999999), 'procategory_id' => 1]);
                
            }
            
            $product = Product::find(1);
            
            $product->CrateNewSlug('test'); 
            
            $product->save();
            
            $this->assertEquals(50, count(Product::all()));
            
            $this->assertEquals(1, count(Product::where('enable', 0)->get()->first())); // geçti
            
            $this->assertEquals(1, count(Product::where('enable', 0)->where('slug', 'test')->first()));  // geçti
            
            $this->assertEquals(1, count(Product::where('enable', 0)->first()));  // geçti
            
            $model =  ProCategory::find(1);
            
            $this->assertEquals(1, count($model->Products()->where('enable',0)->first()));  // geçti
            
            $this->assertEquals(1, count($model->Products()->where('enable',0)->get()->first()));  // geçti
            
}

İlişkilerde kullanırken bir ara get kullanmadan denemiştim. O zaman boş bir class dönüyordu. O günden berri first kullanmadan önce get kullanırım  her zaman.
Dökümantasyona tekrar baktım. Hemen bir test yazdım. Evet hatalı bilgi vermişim. First kullanıldığında get methodu kullanmaya gerek yokmuş. Muhtemelen başka bir hatadan dolayı bu kanıya varmışım.

Teste sizin sorguna benzer bir sorguda da bulundum. Bir hata çıkmadı.

sql sorgusunda sorun  yok ise.  Benzer bir sorguyu diğer modelleriniz deneyin. Hata yoksa muhtemelen sorun yaşadığınız modelde bir şey yanlış tanımlanmıştır.

Dostum sql sorgusunda sorun yok hatta model tanımlamalrında da sorun yok çünkü modellerde id ler guarded olarak ayarlanmış durumda ve birde $table değişkeninde ilgili tablonun adı var acaba $fillable kullanmadığım için mi oluyor dedim onu da ekledim

Ancak burada bir şey dikkatimi çekti bu sorgular http linklerinden çekip sunucuya indirdiğim csv dosyalarının ilgili bilgilerini kaydetmekte kullanılıyor

Türkiyede ki sunuculardan çektiğim dosyaların bilgilerini ilgili tabloya girerken bu hatayı almıyorum ancak yurt dışından gelen aynı dosyamın bilgilerini girerken bu hatayı fırlatıyor

Şimdi aklına şu gelebilir yurt dışından gelen dosyanın bilgileri eksik diyebilirsin ancak hepsini tek tek test ediyorum eksik data yok üstelik daha o aşamaya gelmeden önce veri tabanında var olan bir kaydı seçerken bu hataya düşüyorum , yani kısacası çok ilginç bir durum var ortada , açıkçası olayın get ve first methodları ile alakalı olduğunu sanmıyorum burada sanırım işlem belleği ile ilgili bir durum oluşuyor , yurt dışından gelen dosyaların bilgilerini okuduğumda sanki bellek doluyor sonra eloquent vt ye bağlanamıyor gibi bir durum oluşuyor

Bu arada sineld bilgi için teşekkür ederim

Arkadaşlar bu konuda bana özel yardım edecek biri çıkarsa çok mutlu olurum , gerçi burası forum ortamı özel yardım talep etmek belki biraz ayıp olacak ama 3 günden beri bu saçma hatayla uğraşıp duruyorum neredeyse frameworkden nefret edecek hale geldim desem yeridir , çünki hatya ilişkin bir açıklama da bulamıyorum hata ekranında ve google da sad

selamlar

Çevrimdışı

#7 22.09.2014 16:36:29

MURATSPLAT
Yönetici
Yer: Antalya
Kayıtlı: 06.05.2014
Mesajlar: 642
Website

Yanıt: STMT_PREPARE QueryException hatası ?

@sineld
Deneme yaptım çalışmadı.

 public function testForSineld() {            
            
            ProCategory::create(['enable' => 1]);
            
            $array = array();
          
            for ($i = 0 ;$i< 50; $i++) {
                
               $array[] = ['code' => rand(999, 9999999999999999), 'procategory_id' => 1];
                
            }
            
            Product::create($array); //ExampleTest::testForSineld() ErrorException: preg_match() expects parameter 2 to be string, array given         
            
        }

Ama sol kulak sağ ile kaşınabiliyor smile

 public function testForSineld() {                        
            ProCategory::create(['enable' => 1]);            
            $array = array();
          
            for ($i = 0 ;$i< 50; $i++) {
                
               $array[] = ['code' => rand(999, 9999999999999999), 'procategory_id' => 1];                
            }
           
            $category = ProCategory::create(['enable' => 1]);
            
            $category->Products()->createMany($array);
           
            $this->assertEquals(50, count(Product::all())); // testi geçti            
        }

@betho

CSV dosyasını okuyup "Merchantfeed" modeline mi aktarıyorsun?

Eğer öyleyse şöyle bir sorun olabilir. Bu aktarım sırasında fillable değişkeni modelde doğru olarak tanımlanmamışsa. Tablodaki bazı kolonlar yazılmamıştır. Zira bu durumda Eloquent hiç bir istisna  fırlatmaz. Daha önce böyle bir sorun başıma gelmişti.

Merchantfeed  model tablosu çok büytükse, php limitlerine takılabilir. Bildiğim kadarıyla bu durum sadece loglara bakılarak fark edilebilir. PHP loglarını bir incele. Muhakkak bir yerde hata vardır.

Son düzenleyen MURATSPLAT (22.09.2014 16:37:17)

Çevrimdışı

#8 22.09.2014 16:44:15

MURATSPLAT
Yönetici
Yer: Antalya
Kayıtlı: 06.05.2014
Mesajlar: 642
Website

Yanıt: STMT_PREPARE QueryException hatası ?

Bu arada istisnayı  yakala  ve getTrace() metodu ile  çıktısını al, incele, İstisnanın fırlatıldığı method ve önceki methodlar incelenerek hatanın nedeni bulunabilir.

Çevrimdışı

#9 22.09.2014 18:24:44

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: STMT_PREPARE QueryException hatası ?

MURATSPLAT yazdı:

@sineld
Deneme yaptım çalışmadı.

 public function testForSineld() {            
            
            ProCategory::create(['enable' => 1]);
            
            $array = array();
          
            for ($i = 0 ;$i< 50; $i++) {
                
               $array[] = ['code' => rand(999, 9999999999999999), 'procategory_id' => 1];
                
            }
            
            Product::create($array); //ExampleTest::testForSineld() ErrorException: preg_match() expects parameter 2 to be string, array given         
            
        }

Ama sol kulak sağ ile kaşınabiliyor smile

 public function testForSineld() {                        
            ProCategory::create(['enable' => 1]);            
            $array = array();
          
            for ($i = 0 ;$i< 50; $i++) {
                
               $array[] = ['code' => rand(999, 9999999999999999), 'procategory_id' => 1];                
            }
           
            $category = ProCategory::create(['enable' => 1]);
            
            $category->Products()->createMany($array);
           
            $this->assertEquals(50, count(Product::all())); // testi geçti            
        }

@betho

CSV dosyasını okuyup "Merchantfeed" modeline mi aktarıyorsun?

Eğer öyleyse şöyle bir sorun olabilir. Bu aktarım sırasında fillable değişkeni modelde doğru olarak tanımlanmamışsa. Tablodaki bazı kolonlar yazılmamıştır. Zira bu durumda Eloquent hiç bir istisna  fırlatmaz. Daha önce böyle bir sorun başıma gelmişti.

Merchantfeed  model tablosu çok büytükse, php limitlerine takılabilir. Bildiğim kadarıyla bu durum sadece loglara bakılarak fark edilebilir. PHP loglarını bir incele. Muhakkak bir yerde hata vardır.


Dostum haklısın smile

Sorunu ben de çözdüm aslında sorunun kaynağı gereğinden fazla pc başında kalarak kod tamamlamaya çalışmak başka bir şey değil smile

Problem aynen dediğin gibi bazı kolonlar yazılmadan önce çağırmakmış sad bu da dediğim gibi uzun saatler kod yazmaktan fark edilemiyor ...

Controllerdaki fonksiyonu komple silip adım adım yeniden yazdım ve önce çağırma hatalarını fark ettim ve tabii ki düzelttim

Sonunda sorunsuz bir şekilde çalıştı

Bu konu en azından bu hataya düşenler için örnek olacaktır , üç koca güne bu yüzden yanmıyorum sonuçta bu işe gönül verenlere bir kaynak çıktı böylece

Yardımların ilgin ve alakan için öncelikle sana ve @sineld'e ve diğer tüm forum kardeşlerime teşekkür ederim

Selam ve dua ile

Çevrimdışı

Forum alt kısmı