[ÇÖZÜLDÜ] php my sql de bağlanma ve bağlantıyı kapama üzerine bir soru

Başlatan ecarpar, 15 Ağustos 2011 - 14:55:38

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

ecarpar

şimdi sistemde mysql e bağlanmak ve bağlantıyı kapamak üzerine bir sorun yok istediğim gibi bağlanıp verileri alıp kapata biliyorum, bu seferki sorum teknik bir soru,

mysql_connect("$MySqlName","$MySqlUserName","$MySqlPass");
bağlandık işlemlerimiz id si belli olan kullanıcıyı seçmek şimdi sayfa değişmeden kendi içinde açılan popup ile bilgileri değiştireceğim için bu soruyu soruyorum,
sorguyu yolladıktan sonra bağlantıyı kesmelimiyiz yoksa değişiklik dahil bütün işlerimiz bitincemi kesmeliyiz.

Her bağlantı kendi işini yapıp kapanmalımı yoksa genel kapamamı tercih etmeliyiz?
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

onuragtas

Bildiğim kadarıyla yeni sürüm php bağlantıları bir süre sonra kapatıyor zaten ama sunucuyu hafifletmek gibi bir amacınız varsa her sorgudan sonra kapatmanızı ben önerebilirim. Mesela $query = mysql_fetch_array(mysql_query($sorgu)); gibi bir sorgu yaptıysanız bu sorguya ait tüm işlemler bittikten sonra mysql_close($query); ile kapatmanız bence en iyisi olacaktır.
System.out.println("Hadi gülüm yandan yandan.");

ecarpar

Sağol cevabın benim için çok önemliydi, bir süre sonra kapatıyor ise çok güzel,
bende iç içe geçmiş halde sorgular atmam gerektiğinde nasıl bir yol izliyeceğimi merak ediyordum sadece, her sorgunun kendisini kapatmak banada mantıklı gelmişti.
İmzada güzelmiş.  ;D
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

alquirel

Ortada ciddi bir yanlış var, ve bu çözülmeden de konu kilitlenmese iyi olur :)

mysql_close işlevi, mysql_connect işlevi ile açılmış olan "bağlantı"yı kapatır. Sorgunun kapatılması diye bir şey yoktur.

@by_system'in cevabını biraz daha anlaşılır hale getirmek için şöyle diyebiliriz, kurduğunuz bağlantı ile ilgili tüm sorgulamaları ve güncellemeleri yaptıktan sonra sayfanın sonuna gelmeyi beklemeden bağlantıyı kapatabilirsin. Yoksa mysql_fetch_array işlevinden aldığın $query değişkenini kapatmak diye bir şey malesef YOK.

Kaynak :
http://www.php.net/manual/en/function.mysql-fetch-array.php
http://www.php.net/manual/en/function.mysql-close.php

ecarpar

Hmm şimdi eğer öyle ise....

Mysql e bağlantımı kesiyorum sorguyu durdurmuyorum, o kısım tamam, yani ben sql e bir bağlantı açıyorum ve bunu kesmem gerekli ve bunu bağlantıyı kurup işlemleri bitirdiğimde yapmam en mantıklısı, bir başka sayfadada aynı şekilde sql e bağlanmam gerekirse onunda kendi bağlantısını kurma ve kesme yeteneğinin olması gerekli.

Umarım doğru anlamışımdır. Sorgu evet yanlış oldu ama sql e bağlanmadanda sorgu yapılamadığı için bir an o şekilde yazmak mantıklı gelmişti.
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

alquirel

MySQL bağlantını her sayfan için ayrı ayrı açıp kapatman lazım.
Bir sayfada kurduğun bağlantı ile başka bir sayfanın alakası olmaz.

Yalnız şunu belirtmekte fayda var, benim sayfa dediğim şey her bir php dosyası değil, mesela adres çubuğuna index.php yazarak girdiğinde karşına çıkan sayfadan bahsediyorum. O index.php sayfasını oluştururken büyük ihtimalle tek bir php dosyası kullanmamışsındır, bu durumda sunucu kullanıcının karşısına tam bir index.php sayfası çıkartana kadar çalıştırdığı bütün php dosyalarında aynı bağlantıyı kullanabilir.

Kısacası genelde olay şöyle kurgulanır: Önce gösterilecek sayfa ile ilgili veriler toplanır, gerekiyorsa veritabanı bağlantısı kurulup istenilen veriler çekilir. Gerekli olan tüm veriler toplandıktan sonra sayfaya yerleştirmeye başlanır. Bağlantıyı kapatma işlemini bu iki aşama arasında yapabilirsin. Ama ben genelde verileri yerleştirirken de veritabanına bağlanma durumunda kaldığım için kapatma işini en sona bırakıyorum.

Straga

mysql_free_result(sorgu); bunu yaparsan son yazdığın sorguyu serbest bırakmış olursun

alquirel

Son olarak php.net'ten bir iki alıntı yapmakta fayda var.
Alıntı Yap
Kalıcı olmayan bağlantılar betiğin çalışmasından sonra özdevinimli olarak kapatıldığından mysql_close()'u kullanmak genellikle gerekli değildir. Ayrıca, Özkaynakları serbest bırakmak bölümüne de bakınız.

Alıntı Yap
Özkaynakları serbest bırakmak

PHP 4'ün Zend Motoru sayesinde gönderimsiz kalan özkaynaklar özdevinimli olarak saptanarak bunlara ayrılan bellek çöp toplayıcı tarafından serbest bırakılmaktadır. Bu sebeple bir özkaynağa ayrılan belleği serbest bırakmak ihtiyacı nadiren ortaya çıkar.

Alıntı Yap
mysql_free_result()'ın sadece büyük sonuç kümeleri döndüren sorgularda kullanılan bellek miktarını önemsiyorsanız kullanılması gerekmektedir. Sonuç belleği, betiğin çalışması sona erdiğinde özdevinimli olarak serbest bırakılır.

if