Cevaplar
-
PDO zaten sınıftır bunu istediğin şekilde genişletebilirsin.
-
sharq
tek öğrendiğim şey
try { $db = new PDO("mysql:dbname=".DB_NAME.";host=".HOST_NAME."", "".HOST_USER."", "".HOST_PASW."" ); } catch(PDOException $e) { echo $e->getMessage(); } $sql = "SELECT * FROM cms"; foreach ($db->query($sql) as $row) { echo $row['name'].' : '.$row['languages'].'<br />'; }
şuan sadece bu yani ezSql gibi $query("SELECT")->$sql; flan filan böle bişi yapamazmıyız? yani hazır bi sınıf indirmedim ezsql de hazır sınıf war bunu gibi bişi indrmedim.11 yıl önce yazılmış -
xuma
:) Tam demek istediğini anlamadım ama ezsql'in pdo sınıfıda istersen onuda kullanabilirsin.Ama sql işini iyice kolaylaştırayım diyorsan php activerecords veya doctrine'i araştır.Mesela ben pdo'yu şu şekilde kullanırım;<? public function __construct(PDO $db){ $this->link=$db; } public function kategoriler(){ $sorgu=$this->link->query("select * from page_categories as pc,page_language pl where WHERE( pc.c_id=? and pc.c_active='true') and (pl.i_id=? and pl.l_language=?)"); $sorgu->execute(array("1","1","tr")); $sonuc=$sorgu->fetchAll(PDO::FETCH_ALL); return $sonuc; }
11 yıl önce yazılmış -
sharq
anlamamanı anladım :) kendimi tam olarak ifade edemedim galiba :)
codeigniter'daki gibi veri tabanı seçmek istiyorum yada ezSql deki gibi yani
$db->query("INSERT INTO users (id, name, email) VALUES (NULL,'The Cat','cat@google.com')");
bu tarzda falan ya kendimi anlatamadım yada PDO'nun mantığını tam anlayamadım
$user = $db->get_row("SELECT name, email FROM users WHERE id = 4");
echo $user->name;
echo $user->email;
bunları yapabilecek bu tarz yapabilecek bi sınıf varmı diyorum yani11 yıl önce yazılmış -
xuma
Bu şekilde sorgunu PDO'da çalıştırabilirsin ancak tercihen method$db->query("INSERT INTO users (id, name, email) VALUES (NULL,'The Cat','cat@google.com')");
yerine$sorgu=$db->prepare("INSERT INTO users (id, name, email) VALUES (NULL,:kategori,:email)"); $sorgu->bindValue(':kategori', $kategori, PDO::PARAM_STR); $sorgu->bindValue(':email', $email, PDO::PARAM_STR); $sorgu->execute();
veya$sorgu=$db->prepare("INSERT INTO users (id, name, email) VALUES (NULL,?,?)"); $sorgu->execute(array($kategori,$email));
$user = $db->get_row("SELECT name, email FROM users WHERE id = 4");
yerine$user = $db->prepere("SELECT name, email FROM users WHERE id = ?"); $user->execute(array($id)); $sonuc=$user->fetch(PDO::FETCH_OBJ); echo $sonuc->name; echo $sonuc->surname;
$stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?"); $stmt->execute(array($id, $name)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
Örnekler çok nasıl bir yöntem kullanacağın sana kalmış.Mesela PDO::FETCH_OBJ ile obje şeklinde alabilirken PDO::FETCH_ASSOC klasik yöntemle array şeklinde alırsın.11 yıl önce yazılmış -
sharq
galiba ben pdo'yu anlayamadım
şimdi bu benim db class'ım
class db { private static $HOST_NAME = "localhost"; private static $HOST_USER = "root"; private static $HOST_PASS = "root"; private static $DB_NAME = "furkancelikdb"; public function __construct(){ try { return $dbb = new PDO("mysql:host=$HOST_NAME;dbname=$DB_NAME", $HOST_USER, $HOST_PASS); } catch(PDOException $e){ die("<center><b>!! VERİ TABANINA BAĞANILAMADI !!</center></b>"); echo $e->getMessage(); } } }
şimdi bi sorgu yapacağım
$db = new db; $sth = $db->prepare("SELECT * FROM yonetici"); $sth->execute(); $result = $sth->fetchAll();
burda hata alıyorum prepare'da hata alıyorum demek istediğim şey ezSql'de ezSql sınıfını include ediyoruz PDO'da hiçbir sınıf include etmedim çünkü include edilecek bi sınıfı warmı yokmu bilmiyorum warsada sınıfa sahip değilim aldığım hata Fatal error: Call to undefined method db::prepare() in11 yıl önce yazılmış -
xuma
PDO'yu include etmene gerek yok zaten hali hazırda var.Değişik şekillerde kullanabilirsin yapına göre uygun olan değişir ;$db= new PDO("mysql:host=".VTSUNUCU.";dbname=".VTISIM."",VTKULLANICI,VTPAROLA); $db->exec("SET NAMES 'utf8'"); $db->exec("SET CHARACTER SET utf8"); $db->exec("SET COLLATION_CONNECTION = 'utf8_general_ci'");
class xuma { public function __construct(PDO $db){ $this->link=$db; $_SESSION['dil']=="en" ? $this->dil="en" : $this->dil="tr"; }
$a=new xuma($db);
veyaclass db { private $HOST_NAME = "localhost"; private $HOST_USER = "root"; private $HOST_PASS = ""; private $DB_NAME = "ci"; private $db; public function __construct(){ $this->db = new PDO("mysql:host={$this->HOST_NAME};dbname={$this->DB_NAME}", $this->HOST_USER, $this->HOST_PASS); } public function kullanicilar() { $sorgu=$this->db->prepare("select * from users"); $sorgu->execute(); $sonuc=$sorgu->fetchAll(PDO::FETCH_ASSOC); return $sonuc; } } $a=new db; print_r($a->kullanicilar());
veyaclass xuma extends PDO { private $HOST_NAME = "localhost"; private $HOST_USER = "root"; private $HOST_PASS = ""; private $DB_NAME = "ci"; private $db; public function __construct() { parent::__construct("mysql:host={$this->HOST_NAME};dbname={$this->DB_NAME}", $this->HOST_USER, $this->HOST_PASS); } } $a=new xuma; $sorgu=$a->prepare("select * from users"); $sorgu->execute(); $sonuc=$sorgu->fetchAll(PDO::FETCH_ASSOC); print_r($sonuc);
11 yıl önce yazılmış -
sharq
teşekkr ederim peki bi tavisye edebileceğiniz bi kaynakı varmı PDO ile ilgili kitap , e-kitap , web sitesi ,döküman falan11 yıl önce yazılmış -
xuma
http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Running_Simple_Select_Statements
http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html
ama en güzeli
http://php.net/manual/en/book.pdo.php11 yıl önce yazılmış -
siyahbeyaz
PDO yu kafanda fazla buyutme bence belli baslı fonksiyonları var bu fonksiyonlar cokta güvenli.
$sql = $db->query("select * from"); // bildigin basit bir sorgu.
$sql = $db->prepare("Select * from tablo where id=? AND k_adi=?"); // GET ve veri eklemede kullanılan sql injectiona karsı fonksiyon. fonksiyon icin belirtigin soru isaretleri sirasina göre veri degerini arrraya alman lazım. $sql->execute(array($_GET["id"],$_GET["k_adi"]));
gibi.
veri listeleme$sql = $db->query("select * from"); // bildigin basit bir sorgu. while($yaz=$sq->fetch(PDO::FETCH_OBJ)) { echo $yaz->baslik; }
xuma yeteri kadar ornek vermis..
ek olarak
veri varmı yokmu mysql_num_rows olayınıda yazayım$sql = $db->query("select * from"); // bildigin basit bir sorgu. $kontrol = $sql->fetchColumn(); if($kontrol > 0) { echo "Veritabanı tablonuzda ".$kontrol." kayıt bulundu"; } else { echo "veri bulunamadı.. kontrol degeri = ".$kontrol; }
11 yıl önce yazılmış -
sharq
bu tarz bi sınıf yapmam sizce mantıklımı yani konuya hâla tam hakim olamadığım için deneye deneye öğrenmeye çalşyorum
class db { private $HOST_NAME = "localhost"; private $HOST_USER = "root"; private $HOST_PASS = "root"; private $DB_NAME = "furkancelikdb"; private $db; public function __construct(){ $this->db = new PDO("mysql:host={$this->HOST_NAME};dbname={$this->DB_NAME}", $this->HOST_USER, $this->HOST_PASS); } public function INSERT($sorgu) { $sql=$this->db->exec("$sorgu"); if ($sql > 0 ) { echo "Başarılı"; } else { echo "Olmadı"; } } public function SELECT($sorgu){ $STH = $this->db->query("$sorgu"); $STH->setFetchMode(PDO::FETCH_OBJ); return $STH->fetch(); } } }
11 yıl önce yazılmış -
siyahbeyaz
Bana kalirsa hiç class yapma udo hazır bir class bağlantı kodlarını include ile çek sql injection için prepare kullan yeterlidir11 yıl önce yazılmış -
sharq
işte bnde bunu öğrenmeye çlşıyordum yani bi sınıf çağırayımmı yoksa hazır bişiler warmı diye11 yıl önce yazılmış -
bagova
Ben mysql_connect kullanıyorum ve aşağıdaki geleneksel yöntemi kullanıyorum.
1. Veri çekme
$sql=mysql_query("SELECT baslik from haber where id=5 limit 0,1"); while($veri=mysql_fetch_assoc($sql)) { echo $veri['baslik']; }
2. Veri ekleme
$ekle=mysql_query("INSERT INTO haber (baslik) VALUES ('lorem ipsum') ");
Arkadaşlar PDO ya geçmek istiyorum bu durumda ne yapmalıyım? mysql_connect ayarlarımı değiştirmem gerekiyor mu? BU yazdığınız kodları direk sayfama yazdığımda geçmiş oluyormuyum? Veri eklerken güvenliği nasıl sağlıyoruz?10 yıl önce yazılmış -
siyahbeyaz
evet bir cok yerde degisiklik yapacaksınız. ekstra bir kac kod ekliyeceksiniz.. mysql_num_rows larınız mesela. mysql_query ler degisecek sql injectiondan kacmak icin faarklı methodlar uygulayacaksınız ama avantajı cok guzel. misal bir fetch_all ozelligi var. tum datayi array olarak verior. ama mysql_connect de siz kalkıp bunu bi while dongusune sokmanız lazım. saysay bitmez avantajı.
http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/ burda biraz bilgi var. kullanımı ilgili ile10 yıl önce yazılmış
-