PDO Nedir ve PDO Kullanımı
Temmuz 24th, 2014 • Bilgi Paylaşalım, Genel, PHP, Ufak Yardımlar • No comments
PDO sürücüsü PHP 5.1.0 sürümünden itibaren etkindir.
php.ini dosyasından aşağıdaki satırı etkin hale getirebilirsiniz.
extension=php_pdo.dll
PDO ile veritabanı bağlantısı nasıl yapılır?
try { $db = new PDO("mysql:host=localhost;dbname=deneme;charset=utf8", "deneme", "123"); } catch ( PDOException $e ){ print $e->getMessage(); }
Try catch kullanmaya yavaş yavaş alışsanız iyi olacak. Try catch nesne yönetimli kod yazmak isteyen kişilerin kullandığı bir yapıdır. Try catch’i hataların raporlanmasında kullanıyoruz.
Bağlantı kodunda charset=utf8 belirttim fakat isteğe bağlı olarak aşağıdaki gibi de kullanabilirsiniz.
$db->query("SET CHARACTER SET uf8");
PDO ile select işlemi
$query = $db->query("SELECT * FROM tablo", PDO::FETCH_ASSOC); foreach( $query as $row ){ echo $row['isim']."<br />"; }
Yukarıdaki kod’da PDO::FETCH_ASSOC “Yöntemin, sonuç kümesindeki her satırının, sütun isimleriyle indislenmiş bir dizi olarak döndürüleceğini belirtir. Eğer sonuç kümesi aynı isimde birden fazla sütun içeriyorsa her sütun için tek bir değer döner.” işlemini gerçekleştirmektedir.
Eğer bu şekilde değil de tek bir satır çekecekseniz aşağıdaki kodu kullanabilirsiniz.
$query = $db->query("SELECT * FROM tablo WHERE ID = 1")->fetch(PDO::FETCH_ASSOC); print_r($query);
Eğer parametreyi dışarıdan alacaksanız kesinlikle aşağıdaki kodu kullanmanızı öneririm, çünkü sql injection açığına tam manasıyla bir güvenlik sağlamaktadır.
$sql= "SELECT * FROM tablo WHERE ID = :tabloID"; $query = $db->prepare($sql); $query->bindParam(':tabloID', $tabloID, PDO::PARAM_INT); $sonuc = $query->execute();
Tabi bu kodda integer değer aldık, peki ya string değer alsaydık? Bu sefer de bindParam kısmında aşağıdaki kodu kullanacaktık.
$query->bindParam(':isim', $isim, PDO::PARAM_STR);
PDO ile insert işlemi
Bu aşamayı yine prepare kullanarak yapacağız.
$sql = "INSERT INTO tablo (isim,yaz,) VALUES (:isim,:yazi)"; $query = $db->prepare($sql); $sonuc = $query->execute(array(':isim'=>$isim,':yazi'=>$yazi));
PDO ile update işlemi
Yine yukarıdaki prepare ile yapacağız, fakat bu sefer değişik bir yol göstermek istiyorum.
$sql = "UPDATE tablo SET isim=?, yazi=? WHERE id=?"; $query = $db->prepare($sql); $sonuc = $query->execute(array($isim,$yazi,$id));
PDO ile delete işlemi
insert ve update kodlarında kullandığımızın aynısı aslında, sadece örnek olsun diye ekliyorum.
$sql = "DELETE tablo WHERE id=?"; $query = $db->prepare($sql); $sonuc = $query->execute(array($id));
PDO sonuç kontrolü
Yukarıdaki kodlarda $query->execute kısmına bir değişkene atadım, sizde if ile aşağıdaki gibi işlemin başarılı olup olmadığını görebilirsiniz.
if($sonuc) echo "Execute işlemi başarılı.";
PDO bağlantı sonlandırma
İşimiz bittiğinde bağlantılarımızı sonlandırmamız lazım. Bunun için de aşağıdaki kodu kullanabilirsiniz.
$db = null;
PDO count_row işlemi
Tüm verilerin kaç tane olduğunu saymak için aşağıdaki kodu kullanırız.
$toplam = $query->rowCount();
Ödev İçin Php Kategorili Haber Sitesi
Nisan 21st, 2014 • Bilgi Paylaşalım, Genel, PHP, Ufak Yardımlar • No comments
Yakın bi akrabanın php ödevini beraber yaparken geliştirdiğimiz siteyi yeni başlayanlara yol göstermesi açısından paylaşıyorum.
Öncelikle bir index.php ve duygu.css dosyası oluşturduk.
index.php dosyası:
/* * Dosyalar klasöründen baglanti.php dosyasını * olduğu gibi bu sayfaya ekliyorum * baglanti.php dosyasında veritabanı bilgileri yer almaktadır. */ require_once 'dosyalar/baglanti.php'; ?><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Duygu</title> <link href="duygu.css" rel="stylesheet" type="text/css" /> </head> <body> <?php include 'dosyalar/ust.php'; ?> <table cellpadding="4" cellspacing="0" class="ustmenutable"> <tr> <td id="altkisimtd" > <table> <tr> <td id="sitesol" valign="top"> <?php include 'dosyalar/sol.php'; ?> </td> <td id="sitesag" valign="top"> <div class="ortahaberler"> <?php $sonuc = mysql_query("select * from haberler order by id desc Limit 0,5"); $habersay = mysql_num_rows($sonuc); //Haberleri sayar if ($habersay != 0) { while ($oku = mysql_fetch_array($sonuc)) { echo "<h1><a href='yazi.php?id=" . $oku["id"] . "'>" . $oku["baslik"] . "</a></h1>"; echo "<div class='habericerik'>" . substr($oku["yazi"], 0, 255) . "... <a href='yazi.php?id=" . $oku["id"] . "'>Devamını Oku</a></div>"; } } else { echo "<li>Hic haber yok!</li>"; } ?> </div> </td> </tr> </table> </td> </tr> </table> <?php include_once 'dosyalar/alt.php'; </body> </html>
Duygu.css dosyasının içeriği:
body{ font-family: arial; font-size: 10pt; background-color: #993300; color: #ffffff; } a{ color: #993300; text-decoration: none; //Alt çizgiyi kaldır } a:hover{ color: #7c0000; text-decoration: underline; //altını çizer } .ustmenutd a{ font-weight: bold; font-size: 12pt; color: #ffffff; } .ustmenutd a:hover{ color: #bdbdbd; } .ustmenutable{ width: 900px; } .ustmenutd{ width: 170px; background-color: #468b28; color: #ffffff; text-align: center; } .ustmenutd:hover{ background-color: #224114; } #altkisimtd{ background-color: #ffffff; color:#000000; } #sitesol{ width: 300px; border-right: 1px solid #000000; //hücrenin sağına çizgi çekmek için vertical-align: baseline; //yazıları yukarda tutmak için } #sitesag{ padding-left: 10px; width: 590px; vertical-align: baseline; //yazıları yukarda tutmak için } h1{ font-size: 13pt; margin-top: 6px; //Tepeden 6 pixel boşluk bıraktık } .ortahaberler{ border-bottom: 1px dotted #525252; } .habericerik{ padding-bottom: 5px; }
Php Recursive ile Sonsuz Alt Kategori
Mart 24th, 2014 • Genel, PHP, Ufak Yardımlar • No comments
Elimizde aşağıdaki gibi bi dizi var ve biz bunu recursive ile derin kategori haline getirmek istiyoruz.
Kendi kendisini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyineli (recursive) fonksiyonlar adı verilir.
Derin kategori yani sonsuz alt kategori mantığına göre çalışma yapmak için, bir tane ekstra sütun oluşturuyoruz tablomuza ve bunun adına üst diyoruz, bu sütunda üst kategorinin id’sini yayınlıyoruz.
Array ( [5] => Array ( [id] => 5 [isim] => Citroen [ust] => 0 [altkategori] => Array ( [6] => Array ( [id] => 6 [isim] => Citroen Jumper [ust] => 5 [altkategori] => Array ( [7] => Array ( [id] => 7 [isim] => Citroen Jumpy [ust] => 6 [altkategori] => Array ( ) ) ) ) [8] => Array ( [id] => 8 [isim] => Berlingo [ust] => 5 [altkategori] => Array ( ) ) [9] => Array ( [id] => 9 [isim] => C1 [ust] => 5 [altkategori] => Array ( ) ) ) ) [1] => Array ( [id] => 1 [isim] => Peugeot [ust] => 0 [altkategori] => Array ( [4] => Array ( [id] => 4 [isim] => Peugeot Boxer [ust] => 1 [altkategori] => Array ( ) ) [2] => Array ( [id] => 2 [isim] => Peugeot Partner [ust] => 1 [altkategori] => Array ( ) ) [3] => Array ( [id] => 3 [isim] => Peugeot Partner Tepee [ust] => 1 [altkategori] => Array ( ) ) ) ) )
Şimdi de bu döngüyü yayınlamaya geçiyoruz.
echo rec($kategoriler); function rec($kategoriler) { $sonuc = "<ul>\n"; foreach ($kategoriler as $goster) { $sonuc .= '<li><a href="' . site_url('kategori/' . $goster["id"] . '/' . sef_link($goster["isim"]) . '.html') . '">'; $sonuc .= '' . $goster["isim"] . '</a></li>'; $sonuc .= "\n"; if (!empty($goster["altkategori"])) $sonuc .= rec($goster["altkategori"]); } $sonuc .= "</ul>\n"; return $sonuc; }
Düzenleme 1:
Şimdi bunu bir de select option içerisinde nasıl döndüreceğimize bakalım.
function rec($kategoriler, $ust, $tire) { foreach ($kategoriler as $goster) { if ($goster["ust"] == 0) { $tire = 0; } if ($ust != $goster["ust"]) { $ust = $goster["ust"]; $tire++; } $sonuc .= '<option>' . str_repeat('--', $tire) . $goster["isim"] . '</option>'; $sonuc .= "\n"; if (!empty($goster["altkategori"])) $sonuc .= rec($goster["altkategori"], $ust, $tire); } $sonuc .= "\n"; return $sonuc; }
Yukarıdaki kod içerisinde üst kategorisi arttıkça tire işareti koyduk, kodu detaylı incelediğinizde ayrımı kolayca yapabileceksiniz.
Web Tabanlı Fihrist Programı
Mart 17th, 2014 • Portfolio • No comments
Daha önce geliştirdiğimiz nüans web tabanlı crm programı istek doğrultusunda fihrist programına dönüştürülmüştür.
Nüans Yazılım tarafından desteklenen programda bir çok özellikte kişi bilgileri tutulmaktadır. Datatable ile hızlı arama ve akıllı sırama özelliği bulunmaktadır. (ortalama arama süresi 0.012 saniye) Devamını oku »
Codeigniter Parser stdClass Sorunu
Aralık 27th, 2013 • Codeigniter, Genel, PHP, Ufak Yardımlar • No comments
Codeigniter parser library kullanırken aldığım hatanın çözümünü sizinle de paylaşmak istiyorum.
Parser yaparken stdclass string ifadeye çevrilmediği için arıza veriyor. Devamını oku »
Nüans Web Tabanlı CRM Programı
Aralık 18th, 2013 • Portfolio • 1 comment
Nüans yazılım bünyesinde geliştirdiğim CRM programı hakkında detaylı bilgiler vermek istiyorum.
Bu yazılımı geliştirirken php tabanlı kullanışlı framework olan Codeigniter kullandım, arayüz tasarımını ise themeforest üzerinden satın aldık.
CRM ‘in açılımı “Customer Relationship Management” yani müşteri ilişkileri yönetimi. Kurum veya işletme müşterileriyle olan ilişkilerini, tüm işlerini koordine etmesini sağlayan uygulamaların bütünüdür.
Data mining (Veri madenciliği) ile satışlarını ve kar oranlarını artırabilirler, bunu da CRM programına eklenen veriler ile sağlayabilirler.
CRM programının web tabanlı olması, her yerden erişim imkanı olmasını sağlar, sahada bulunan şantiye şefi telefonundan programa girerek gerekli bilgileri görebilir veya yeni veri ekleyebilir. Bu nedenle web tabanlı olarak CRM programı geliştirmeye karar verdik. Devamını oku »
Mysql Left Join ile Count ve SUM Kullanmak
Kasım 12th, 2013 • Bilgi Paylaşalım, Genel, SQL • No comments
Başlık çok acayip oldu ama yapmak istediğimizden kısaca bahsedebilirim.
İki tane tablom var birinde firmalar diğerinde verilen servisler. Firmalara ait servisler giriliyor, bana lazım her firmaya ne kadar servis verilmiş ve toplam ne kadar servis vermişim.
Servisleri count ile saydırdım, tarih ve saat farklı sütunlardaydı CONCAT ile birleştirdim, TIMESTAMPDIFF ile dakika olarak farkı aldım, SUM ile de tüm dakikaları topladım, COALESCE ile toplam değer NULL ise 0 yazdırdım.
GROUP BY ile gruplayarak sadece firmalara göre işlem yaptırdım.
Öyle işte…
İşte o kod:
SELECT COUNT(servis.firmaid) as servissayisi, COALESCE(SUM(TIMESTAMPDIFF(MINUTE, CONCAT(servis.giristarih," ",servis.girissaat), CONCAT(servis.cikistarih," ",servis.cikissaat))),0) as toplamsure, firma.id as firmaaid, firma.isim,firma.yetkili,firma.telefon1,firma.telefon2,firma.ilce,firma.sehir FROM firma LEFT JOIN servis ON firma.id=servis.firmaid GROUP BY firma.id ORDER BY servissayisi DESC
edit: COALESCE(sum(…),0) ile NULL değeri 0 olarak yazdırdım.
MongoDB ve PHP Tarih işlemleri
Temmuz 4th, 2013 • Bilgi Paylaşalım, Genel, MongoDB, PHP • No comments
Belirli bir formatta tarih gösterme;
date('d M Y h:i:s', $obj["tarih"]->sec)
Tarih Aralığına Göre İçerik Çekme
$dbhost = 'localhost'; $dbname = 'newDB'; $m = new Mongo("mongodb://$dbhost"); $con = $m->$dbname->yazi; $baslama = new MongoDate(strtotime("2013-05-25 00:00:00")); $bitis = new MongoDate(strtotime("2013-05-27 00:00:00")); $goster = $con->find(array("tarih" => array('$gt' => $baslama, '$lte' => $bitis))); foreach($goster as $obj){ echo date('d M Y h:i:s', $obj["tarih"]->sec) ." "; }
Detaylı olarak php.net üzerinden inceleyebilirsiniz http://us1.php.net/manual/en/class.mongodate.php
MongoDB ve PHP ile Basit Form İşlemi
Temmuz 4th, 2013 • Bilgi Paylaşalım, Genel, MongoDB, PHP • No comments
Standart PHP kodları çok fazla bi değişiklik yok, örneği detaylı incelediğinizde daha iyi anlayacaksınız.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>MongoDB ile Form</title> </head> <body> <?php //Bağlantıyı Açalım $dbhost = 'localhost'; $dbname = 'newDB'; $m = new Mongo("mongodb://$dbhost"); $con = $m->$dbname->yazi; if($_GET["sayfa"]=="kaydet"){ $icerik = array( 'isim' => $_POST["baslik"], 'ilk' => $_POST["yazi"], 'tarih' => new MongoDate() ); $con->save($icerik); echo "eklendi <br />"; } ?> <form id="form1" name="form1" method="post" action="?sayfa=kaydet"> Başlık: <input type="text" name="baslik" value="" /><br /> Yazı <textarea name="yazi" cols="25" rows="4"></textarea><br /> <input name="yolla" value="Gönder" type="submit" /> </form> <?php $goster = $con->count(); echo "Toplam ".$goster." tane içerik mevcut"; ?> </body> </html>
MongoDB ve PHP ile ilk işlemler
Temmuz 3rd, 2013 • Bilgi Paylaşalım, MongoDB, PHP, Ufak Yardımlar • 2 comments
MongoDB windows kurulumunu gerçekleştirdikten sonra php ile ilk bağlantımızı yapmaya geldi sıra.
Öncelikle sql ile mongoDB arasındaki temel farklılıkları aşağıdaki tablodan inceleyiniz.
SQL | MongoDB |
Database | db |
Table | Collection |
Row | Document |
Column | Field |
Localhost MongoDB Bağlantısı
$dbhost = 'localhost'; $m = new Mongo("mongodb://$dbhost");
Bu işlemi yaptıktan sonra collection’a nasıl bağlanacağımızı aşağıdaki kod’dan inceleyelim.
$con = $m->$dbname->yazi; // yazı ismindeki collection'a bağlandık
Şimdi de find() ile collection içindeki tüm verilere ulaştık ve dizi olarak dönen sonuçları foreach döngüsü ile ekrana yazdırdık.
$cursor = $con->find(); foreach($cursor as $obj){ echo $obj["isim"]; }
MongoDB PHP Yeni Document Eklemek
Array olarak field’lar içine eklenecek verileri belirledikten sonra collection bağlantısı yaptığımız ifadeye save() methodu ile gönderiyoruz.
$icerik = array( 'baslik' => 'MongoDB', 'yazi' => 'buraya yazı detayları gelecek', 'tags' => array('etiket 1','etiket 2') ); $con->save($icerik);
MongoDB PHP Delete işlemi
delete from yazi where baslik = “MongoDB”
sorgusunun mongodb ile kullanım şekli aşağıdaki gibidir.
$icerik = array( 'baslik' => 'MongoDB' ); $con->remove($icerik);
MongoDB PHP koşula göre veri çağırma
SELECT * From yazi WHERE baslik = “MongoDB” order by name ASC Limit 10
Yukarıdaki sorgunun çevrilmiş hali aşağıdadır.
$icerik = array( 'baslik' => 'MongoDB' ); $con->find($icerik)->sort(array("name" => 1))->limit(10);
MongoDB PHP Update İşlemi
UPDATE users SET baslik = ‘Yeni Başlık’ WHERE _id = 18
$icerik = array( '$set' => array('baslik' => 'Yeni Başlık') ); $kosul= array( '_id' => 18 ); $con->update($kosul,$icerik);
Genel olarak PHP ile MongoDB kullanım sözcükleri bunlar, daha detaylı incelemek için ww.php.net üzerindeki örnekleri ve detayları inceleyebilirsiniz.
Benim blog’da amacım sizin ilk adımı atmanızdır. Hatalarım varsa bildirirseniz sevinirim. Hatalarınızı yorum kısmından sorabilirsiniz.
Görüşmek üzere.
Son Yorumlar