Merhabalar,
Uzun zamandır PHP kategorisinde bir şeyler paylaşmıyordum. Bu suskunluğu güzel ve faydalı bir sınıf yazarak bozmak istedim.
PHP.net üzerinden yapılan bir açıklamaya göre, bir süre önce PHP artık mysql_* fonksiyonları için destek vermeyeceğini ve mysql_* fonksiyonlarının ömrünü doldurduğunu söylemişti. Bundan sonra mysql_* fonksiyonlarının yerine PDO veya MySQLi kullanmaya özen göstermemiz gerekiyor. Bende bu doğrultuda PDO'ya kolay adapte olmak, hızlı ve düzenli kod yazarak SQL sorguları oluşturmak için bir PDO sınıfı yazdım.
Yazdığım sınıfın adını PDOx olarak belirledim. PDOx kullanarak hızlı bir şekilde PDO kullanabilir, sınıf içerisinde gelen metotlar ile birlikte çok daha hızlı ve düzenli şekilde SQL sorguları oluşturabilirsiniz. Şimdi PDOx'u indirelim ve kullanımı ile ilgili detaylara göz atalım.
- PDOx'u kullanmak için sunucunuzda PDO'nun aktif olması gerekmektedir.
- select() metodunu kullanmazsanız, bu tüm alanları seçtiğiniz anlamına gelir. Ama SQL performansı için, select() metodunu kullanmanızı ve sadece kullanacağınız alanları seçmenizi öneririm.
- get() ve getAll() metotlarına parametre olarak 'true' değeri gönderirseniz, geriye dönen değerler object (nesne) değil, array (dizi) olur. Örnek: getAll(true); veya get(true);
- PDOx'u kullanarak MySQL dışında PostgreSQL ve SQLite veritabanlarına bağlanabilirsiniz.
- PDOx, sadece temel SQL komutlarını hızlı ve düzenli bir şekilde oluşturmanızı sağlar. Her ne kadar geliştirmeye devam etsem de, daha ileri düzey SQL sorguları için orjinal PDO sınıfını kullanabilirsiniz.
- PDOx üzerinden orjinal PDO metotlarını kullanmak için 'pdo;' özelliğini kullanabilirsiniz. Örnek: $db->pdo->prepare("..."); ... Bu şekilde, $db->pdo ile PDO'nun tüm metotlarına erişebilir ve kullanabilirsiniz.
Eğer PDOx sınıfı ile ilgili olarak söylemek istediğiniz olumlu, olumsuz görüş ve istek belirten her türlü mesajı ister bu konu altına yorum bırakarak, ister iletişim sayfasını kullanıp e-posta atarak bana iletebilirsiniz. PDOx'u geliştirmeye devam etmeyi düşünüyorum. En azından, en iyi ve sağlam şekilde belirttiğim temel görevleri yerine getirene kadar. Böylece bir çok arkadaşımızın işleri kolaylaşmış, daha hızlı, düzenli ve güvenli kod yazmış olacak.
Eğer PDOx konusunda "benimde çorbada tuzum olsun" derseniz, PDOx on Github sayfasından geliştirmelere dahil olabilir veya en son güncellemelerden bilgi sahibi olabilirsiniz.
İyi kullanımlar!
Son olarak; "BİLGİ PAYLAŞTIKÇA GÜZEL..."
24 Kasım 2022 tarihinde PHP 8.2 versiyonunun kararlı sürümünün yayınlanması bekleniyor. Bu yazımızda PHP’nin yeni sürümü için yapılan yenilikleri ve iyileştirmeleri inceleyeceğiz.
...
In Laravel, you can make concurrent request by using pool method of the HTTP Client of the Laravel....
Laravel has a very powerful and useful Service Container and you can extend any service from the Laravel Container any time. For that, you can use the extend() method to decorate or configure the resolve services from the container. ...
We use models a lot when developing projects with Laravel. By defining the relationships between the tables within the models, we ensure that the relevant data is brought over the database in a practical way. We can take advantage of the Eager Loading feature to increase performance and get faster results when performing operations with related models. For this, we can use the with() method when creating a query from the related models:
...
Bildiğiniz gibi Laravel ile geliştirme yaparken modellerimize uygun şekilde fake veriler oluşturmak için Faker kütüphanesi ile fazlaca haşır neşir oluyoruz. Genellikle text veriler oluştursak da, Faker kütüphanesinin resim oluşturmak gibi yetenekleri de var:...
Laravel'de zamanlanmış görev (scheduled task) tanımlarken, çalışan komutun tamamlanıp tamamlanmadığını anlamak ve buna göre başka işlemler yapmak istiyorsanız şu şekilde bir yapı kullanabilirsiniz:
PHP 8.1, 25 Kasım 2021 tarihinde yayınlandı. Bu sürümde hayatımıza neler girdi, ne gibi değişiklikler yapıldı birlikte inceleyelim mi?...
Merhabalar. PHP 8 ile birlikte hayatımıza neler gelecek, neler değişecek birlikte göz atmaya var mısınız? Haydi başlayalım o zaman…
...
Selamlar. Ramazan ayının ve sahuru beklemek bahanesiyle gece geç saatlere kadar takılmanın vermiş olduğu yetkiye dayanarak yine bazı projeler üzerine çalışıyor, bazı araştırmalar yapıyor ve müzik dinliyordum. Ve birden "uzun zamandır bir şeyler karalamıyorum ben ya" diye bir düşünce geçti beynimin derinliklerinden. Hemen buraya geldim....
React’in 16.8 versiyonu ile birlikte hayatımıza Hook kavramı girdi. Artık çok daha az kod ile daha efektif React Componentleri yazabiliyoruz. Hooks konusu ile ilgili detaylı bilgiyi React’in kendi dokümantasyonundan okuyabilir, bilgi sahibi olabilirsiniz....
PHP 7.4 ile birlikte hayatımıza girecek olan özelliklere şöyle hızlıca bir bakış atmaya ne dersiniz?
...
React ile High Order Component kavramını sizlere anlatmaya çalışacağım....
Selamlar, oldukça uzun bir zaman sonra tekrar buralardayım. Dolu dolu geldim ama; biraz oturun, konuşalım....
Yine aylar olmuş ve buralarda gözükmüyorum. Ne zaman "buralara daha çok vakit ayıracağım, bol bol yazacağım" desem, kesin başka bir şeyler çıkıyor; işler, güçler, yoğunluklar vs, odaklanamıyorum. Öyle ya da böyle bunu bir düzene oturtacağım. inatçıyım bu konuda....
Buraları yine oldukça aksatmış olmanın verdiği iç rahatsızlığı ile, geçen haftadan beri bir şeyler karalamaya olan isteğim ancak şu an vuku buluyor. Geçen hafta oldukça yoğun ve hareketli geçtiği için yazmaya vakit bulamadım aslında. Ya da ne bileyim, belki de bahane buluyorum......
"Gidelim buradan... Göğsünü sıkan, içini daraltan o laneti geride bırakıp gidelim. Burada yağmur bile güzel yağmıyor artık. Yağmuru güzel yağan bir yerlere gidelim....
74 adet yorum yapılmış. Sende yap!
İnceleyip geri dönüş yaparsan sevinirim..
Fatal error: Call to undefined method stdClass::count() in C:\xampp\htdocs
aynen dediğiniz gibi kullanıyorum
$kategoriBul = $db->from('kategoriler')->where('kategori_id',"=",$id)->where("kategori_tip","!=",$tip)->getAll();
if ($kategoriBul->count() > 0){
.......}
tamda count() fonksiyonunda hata veriyor. sebebi ne olabilir acaba yardım edermisiniz
yine where olarakmı kullanmak gerekiyor. and kullanıldıgı taktide hataya düşüyor sorgu.
//function sver($id,$deger){
//$sql2 = $db->prepare("select $deger from ert where no=$id");
//$sql->execute(array($deger));
//$row2=$sql2->fetch(PDO::FETCH_ASSOC);
//}
şeklinde sorgular çalışmıyor. sizin sorgu yontemizlede çalışmıyor
Call to undefined method pdo::prepare
Fatal error: Call to undefined method Database::prepare()
vs gibi hep hata aldım :)) nedir cozumu acaba normal kullanımda çalışan sorgularım fonksiyon içinde çalıştıramadım global değişkenide atadım başka şeylerde denedim yemedi :))
bu konuda yardımcı olaiblirmisin burak ?
32. Satır: private $result = [];
34. satır: private $op = ['=','!=','<','>','<=','>=','<>'];
63. satır: $this->pdo->exec("SET NAMES '".$charset."' COLLATE '".$collation."'");
124. satır: $_where = [];
160. satır: $_keys = [];
377. satır: $val = "" . implode(", ", array_map([$this, 'escape'], $data)) . "";
396. satır: $values = [];
509. satır: $this->result = [];
Class yapınızı kullanıyorum ancak,
tablo setim; utf8_general_ci
karakter setim : utf8
olmasına rağmen insert ve update işlemlerinde türkçe karakter hataları almaktayım.
Normal bir şekilde (mysqli veya pdo) insert ve update işlemi gerçekleştirdiğimde bir problem bulunmamaktadır.
Sınıf ile alakalı sorum ve bir talebim olacak
Sınıf'ta neden prepare ve execute kullanmadınız. ( Yanlış anlaşılmasın sadece kullanım amacıma uygun olup olmadığından soruyorum. )
Sınıfın prepare ve execute kullanımı ile ilgili tanımlayıcı bir açıklama yapabilirseniz sevinirim.
İyi Çalışmalar
son güncelleme ile ilgili sınıfı aşağıdaki şekilde kullanıyorum ama, iki orderBy 'ı kullanamadım sanırım, sadece sonda kini dikkate alıyor. Dokümanda da bulamadım var mıdır bir çaresi. Kullanım şeklim aşağıdaki gibidir.
$db->table('00_menu')->where("menu_aktif",1)->orderby('menu_submenu_id ','ASC')->orderBy('menu_sira ASC')->getAll();
$db->pdo şeklinde kullandığımızda PHP Strict Standards: Only variables should be passed by reference in hatası alıyorum. pdox ile hata yakalamada sorun yaşıyorum. db.error... çalışmıyor..yardımcı olursanız sevinirim.
bir tabloda güncelleme yapmak içindeki değeri +1 arttırmak istiyorum bunun için ne yapmam gerekiyor?
Ayrıca tarih fonksiyonlarını nasıl kullanacağız month(current_date()) gibi ?
Öncelikle hazırladığınız sınıf gerçekten çok mükemmel ve işlevsel olmuş. Bunun için ayrıca teşekkür etmek isterim. Fakat sormak istediğim birşey var.
Sınıfı başlatırken örneğin $db = new Pdox($config) şeklinde değilde direk $db = new Pdox() şeklinde başlatma imkanımız yokmu acaba ?
Birincisi, örneğin telefon, fax, gsm gibi veriler geliyor olsun formdan. Şimdi ben bu değerleri inserte eklemeden önce boşmu gelmiş dolumu gelmiş diye kontrol ediyorum. Eğer boş ise telefon = NULL şeklinde null yapıyorum fakat ne yaparsam yapayım veritabanına asla NULL kaydetmiyor. Eğer alan integer ise sıfır string ise boş atıyor ama asla null kaydetmiyor. Sadece o veriyi hiç yollamazsam NULL atıyor. Kısaca birinci sorum verileri boş ise null kaydetmesi için ne yapabiliriz. (Tablolar varsayılan NULL şeklinde. Defalarca kontrol ettim)
İkinci sorum ise view şeklindeki sorguları sizin kütüphaneniz ile kullanabilmemizi sağlayan bir fonksiyon mevcutmu ? Yine örnek vermek gerekirse "musteriler" adında bir view hazırladım ve örneğin düzenleme yapmak istediğimde where ile bunu çağırıyorum fakat bütünlük olması açısından query ile değilde direk sizin kütüphaneniz ile kullanmam mümkünmü bunu öğrenmek istemiştim.
Şimdiden çok teşekkür ederim.
İyi Çalışmalar Dilerim.
@Berkay; şurada böyle bir soru cevapladım. bakabilirsin: https://github.com/izniburak/pdox/issues/8
Parse error: syntax error, unexpected '[' in /home/*******/vendor/izniburak/pdox/src/Pdox.php on line 37
ilgili satır
protected $result = [];
Başarlı bir paylaşım olmuş emeğine sağlık eminim çoğu kişinin işine yarayacaktır.
Bu ara da dosya dizininde nasıl değişiklik yaparım hepsini tek bir klasör içine almak istiyorum.
Fakat Resimde belirttiğim gibi tüm dosyaları tek bir yerde bulunacak şekilde dosya dizini nasıl değiştire bilirim.
https://i.hizliresim.com/yznYBa.png
benim bir çözüm önerisine ihtiyacım var.
tüm tablo yapılarımda ayrı olmasına rağmen bir tabloda gerekli olduğu için verilerimi virgül ile ayırıyorum
"a,b,c,d,e," gibi ben buradan sorgumu like('sutun','%,'.$aranan.',%') şeklinde çözdüm fakat bundan daha basit kullanımı
ya da find_in_set('a','a,b,c') gibi bir kullanım yolu çözümünüz var mı
PDOx sınıfını ciddi bir projede kullanmayı düşünüyorum. Bazı noktalar var kafama takılan.
Örneğin; update() fonksiyonunu kullanırken eğer gönderilen veriler veritabanındaki veriler ile aynı ise fonksiyon false olarak dönüyor.
Ayrıca sistemin içerisinde bir cache sınıfı mevcut ama devre dışı bırakmışsınız. Sınıf içindeki $cache değişkenini varsayılan olarak false atamışsınız. Bunu değiştirince cache sistemi düzgün çalışıyor (hatalı çalışıyorsa lütfen söyleyin :)). yani ben bir hata göremedim.
Bu sorularıma cevap verirseniz çok sevinirim. iyi çalışmalar dilerim
bir türlü çalıştıramadım bana bu konuda yardımcı olursan sevinirim
UPDATE news SET views = views + 1 where id = 3
Bu sınıfta insert, update ve delete işlemlerinin başarılı olup olmadığını, başarısızsa hatanın çıktısını nasıl alabiliriz?
mesela $data arrayından tabloda olmayan bir sutunu yazdık ve errora düştü bu erroru nasıl yakalatabilirim ve echo ile yazdırabilirim
$this->conn->table('uye_kullanici')->insert($data);
$this->conn->error(); -- Bununla yazdıramadım bir türlü ekrana