PHP+MySQL[i] Hakkında. Yardımcı Olursanız Sevinirim:)

t(>_<t)

Öğrenci
Katılım
3 Ekim 2009
Mesajlar
44
Reaksiyon puanı
3
Puanları
0
Merhaba;
Bütün gece oturdum php'de classlar ve mysql olayını kurcaladım. Sebebini çözemediğim çok garip bir noktaya takıldım. Yardımcı olursanız çok sevinirim.

Önce ne yaptığım :
MYSQL:
======
Accounts Tablosu : id,username,password
chkUser prosedürü :

Kod:
select count(id) as cnt from accounts where username = UN and password = PW;

getUserInfo prosedürü :

Kod:
select * from accounts where username = UN and password = PW;

HTML:
=====
İçinde 2 Field'i olan bir form action'i do.php methodu post.

PHP :
====
SQL.php

Bu SQL.php yi kendim yarattım, bi class. Constructor a bağlantı parametrelerini yolluyorum. Bunun dışında 2 method tanımladım, bunlarlada yukarda bahsettiğim stored procedureleri çekiyorum.

PHP:
<?php
class SQL
{
 private $sql;
 private $h;
 private $u;
 private $p;
 private $t;
 function SQL($host, $un, $pw, $tbl) // constructor içine 4 parametre alıyor
 {
  $this->h = $host; // adres
  $this->u =  $un; // db_kullanici_adi
  $this->p =  $pw; // db_sifre
  $this->t =  $tbl; // db_adi
  // mysqli olustur $this->sql e ata
  $this->sql = new mysqli($this->h,$this->u,$this->p,$this->t);
 }
 
 // bunun ne oldugundan tam olarak emin degilim (^^)
 function __destruct(){ }
 
 
// kendisine verilen $user, $pass parametreleriyle proseduru calistiriyor.
// outputu return ediyor
 public function chkUser($user,$pass)
 {
  $result = $this->sql->query("call chkUser('".$user."','".$pass."')");
  $cnt = $result->num_rows;
  if ($cnt > 0) { $row = $result->fetch_object();  return $row; }
 }
 
// kendisine verilen $user, $pass parametreleriyle proseduru calistiriyor
// outputu return ediyor
 public function getUserInfo($user,$pass)
 {
  $result = $this->sql->query("call getUserInfo('".$user."','".$pass."')");
  $cnt = $result->num_rows;
   if ($cnt > 0) { while($row = $result->fetch_object()) { return $row; } }
 }
}
?>

do.php
Bu dosya formdan veriyi aliyor. Eğer kullanıcı 2 kutucuğuda doldurmuşsa;
sql objesi yaratıyor.
chkUser fonksiyonunu çağırıp, user|pass db de varmı kontrol ediyor.
eğer bu ikili varsa fonksiyon 1 dönüyor, yoksa 0 dönüyor.

eğer dönen sonuç 1 ise bu sefer, bu kullanıcının bilgilerine bakıyorum.
bunuda getUserInfo fonksiyonunu çağırıp yapıyorum.
buda kısaca select * from accounts where username = .. and password = ... sorgusunun sonucunu dönüyor.

PHP:
$un = $_POST['username'];
$pw = $_POST['password'];
if ($un != "" && $pw != "")
{
 $s = new SQL("db_adresi","db_user","db_pass","db_adi");
 $tmp = $s->chkUser($un,$pw);
 $res = $tmp->cnt;
 if ($res == 1)
 {
  $nfo = $s->getUserInfo($un,$pw);
  echo "Merhaba ".$nfo->ad." ".$nfo->soyad."<br>"; 
 }
?>

şimdi sorunuma geleyim :)
do.php de sadece fonksiyonların bir tanesi çalişiyor :)
Mesela :
$s = new SQL("db_adresi","db_user","db_pass","db_adi"); tanımladıktan sonra
$s->chkUser($un,$pw) yi çağırırsam çalişiyor. fakat arkasından
$s->getUserInfo($un,$pw) yi çağırırsam çalışmıyor.

Aynı şekilde;
Önce
$s->getUserInfo($un,$pw) yi çağırırsam çalışıyor. fakat arkasından
$s->chkUser($un,$pw) yi çağırırsam bu sefer bu çalışmıyor :)

2 saattir bu niye oluyor diye kıvranırken bişeyi keşfettim.

SQL.php ye bi method eklersem eğer;
misal:
PHP:
function set($adres,$dbadi,$dbpass,$dbname)
{
$this->sql = new mysqli($adres,$dbadi, $dbpass, $dbname);
}

ve bu methodu 2. methodu çağırmadan önce çağırırsam , bu sefer istediğim gibi sonuç alıyorum yani

$s = new SQL(...)
$s->chkUser(...);
....
$s->set(...);
$s->getUserInfo();

Şimdi soru;
Ben bu class i oluşturduğumda;
bağlantı ayarlarını bi kere yaptığımda;
Veritabanıyla bir kere işlem yaptıktan sonra, niye bağlantı ayarları uçuyor, niye tekrar yapılandırmak zorundayım?

php ile mysql e diğer bağlanma şekillerini biliyorum,
mysql, mysqli_connect, ... o yüzden bu şekillerle dene diye tavsiye etmeyin lütfen, bu oop tarzi bağlanti olayini çok sevdim ben :)

Şimdiden teşekkürler (^^)
 

rainman4009

Asistan
Katılım
24 Şubat 2010
Mesajlar
250
Reaksiyon puanı
5
Puanları
18
biraz kısaltsaydın... kimse bunun tamamını okumak için zaman ayaırmaz... en azından hata aldığın kodu ve satırı koysaydın
 

orcnd

Dekan
Katılım
13 Ekim 2008
Mesajlar
6,394
Reaksiyon puanı
255
Puanları
63
her sql işleminden sonra
mysqli->error 'u bastır bir bak kodlarda sorun görünmüyor.
 
Üst