realioseb / Dashboard_realioseb

web III project
0 stars 0 forks source link

მონაცემთა ბაზის აბსტრაქცია #10

Open ioseb opened 10 years ago

ioseb commented 10 years ago

განახორციელეთ შემდეგი ინტერფეისის იმპლემენტაცია. გაითვალისწინეთ, რომ აპლიკაციის კოდში უნდა გამოიყენოთ მხოლოდ ეს ინტერფეისი.

მთლიანად თქვენი გასაკეთებელია.

ინტერფეისი:

function db_update($table, $data, $conditions) { }

function db_insert($table, $data) { }

function db_select($table, $conditions) { }

function db_delete($table, $conditions) { }

function db_query($query) { }

გამოყენების ნიმუშები:

// SELECT * FROM users WHERE name='john'
$users = db_select("users", array(
  "name" => "john"
));

// SELECT * FROM users WHERE role='admin' AND sex='female'
$users = db_select("users", array(
  "role" => "admin",
  "sex"  => "female"
));

// INSERT INTO users
//  (first_name, last_name, email, password)
// VALUES
//  ('john', 'doe', 'john@doe.com', '1234123413241234')
//
$result = db_insert("users", array(
  "first_name" => "John",
  "last_name"  => "Doe",
  "email"      => "john@doe.com",
  "password"   => md5("test"),
));

if ($result) {
  // do something meaningfull...
}

// UPDATE users
//  SET last_name='Doe Doe'
// WHERE
//  email='john@doe.com
//
$result = db_update("users", array(
  "last_name" => "Doe Doe",
 ), array(
  "email" => "john@doe.com"
));

// DELETE FROM users WHERE email='john@doe.com'
// 
$result = db_delete("users", array(
  "email" => "john@doe.com"
));
realioseb commented 10 years ago

@ioseb ვერ ვხვდები, ვთქვათ db_select-ის შემთხვევაში $condition აუცილებლად ერთი იქნება თუ მეტიც შეიძლება იყოს? თუ მრავალი შეიძლება იყოს მაშინ AND და OR-ის განსხვავებაც ხო მომიწევს თვითონ ფუნქციის შიგნით?

realioseb commented 10 years ago

select ასე მიწერია და დიდი აბსურდია თუ სხვებიც ასე გავაკეთო?

function db_select($table, $conditions, $ao = 1)
{
    //bazastan kavshiri
    $db = dbConnect();

    if ($ao == 1) {
        $ao = "AND";
    } else if ($ao == 0) {
        $ao = "OR";
    } else {
        return "error: 3rd argument is invalid. please provide integer 1 if you want AND statement and 0 if you want OR statement";;
    }

    $where = "";
    foreach ($conditions as $key => $value) {
        if ($where == "") {
            $where .= $key . " = " . $value;
        } else {
            $where .= " {$ao} " . $key . " = " . $value;
        }
    }

    $brb = $db->query("SELECT * FROM {$table} WHERE {$where}");

    $result = $brb->fetchAll();

    return $result;
}
ioseb commented 10 years ago

@realioseb პირველ რიგში სანამ AND/OR პრობლემის გადაწყვეტით დავიწყებთ, მნიშვნელოვანია ე.წ. პრიპეარდ სტეიტმენტი გამოიყენო. მასე მოთხოვნა არ უნდა ააგო.

შემდეგ, return: error... რომ გაქვს შეცდომების დამუშაბება მასე არ ხდება... იდეურად არასწორია. ყველაზე მარტივად მოგვარებადი იქნება თუ return NULL - ს დააბრუნებ, ან throw new Exception... - ს გამოიყენებ შესაბამისი მესიჯით.

შეცდომის თემა რომ გავაგრძელოთ მანდ, მარტივად შეძლება ეგ პირობა მთლიანად გადაწერო შემდეგნაირად:

$ao = !!$ao;

და დამთავრდება ყველაფერი, ან TRUE გექნება ყოველთვის და ან FALSE.

ioseb commented 10 years ago

@realioseb

ioseb commented 10 years ago

@realioseb ფუნქციების სახელები ერთ სტილში გააკეთე:

$db = dbConnect();

ასე გადააკეთე:

$db = db_connect();

ასევე კოდის ამ ფრაგმენტში:

function db_select($table, $conditions, $ao = 1)

$ao პარამეტრის ნაგულისხმევი მნიშვნელობა დააყენე TRUE შენ მანდ ჭეშმარიტი/მცდარი შესაბამისობა გაქვს და კოდიდან უნდა ჩანდეს. უბრალოდ 1 რომ გიწერია ხსენებული შესაბამისობა არ ჩანს.

function db_select($table, $conditions, $ao = TRUE)
realioseb commented 10 years ago

@ioseb დავწერე ეს ფუნქციები და ცალკე კლასში გავიტანე db_functions, შეგიძლიათ ნახოთ შესაბამისი კომიტი.
ასევე დავამატე პრივატული მეთოდები, მაგალითად setUpWhereStmt():
მისი მიზანია გადაცემული არგუმენტის მიხედვით გაამზადოს query-ის ის ნაწილი რომელიც მოსდევს WHERE-ს (ანუ ჩასვას საჭირო რაოდენობის კითხვის ნიშნები) და მოგვცეს შესაბამისი მასივი, რომელიც შეიცავს გადაცემული არგუმენტის ელემენტებს ჩვენთვის საჭირო თანმიმდევრობით.
მაგალითად ასეთ მასივის გადაცემის შემთხვევაში:

$conditions = array('id' => 3, 'country' => 'georgia');

მეთოდი დააბრუნებს ასეთ მასივს

array(2) {
    ["options"]=> array(4) {
        [0]=> string(2) "id"
        [1]=> int(3)
        [2]=> string(7) "country"
        [3]=> string(7) "georgia"
    }
    ["where"]=> string(16) "? = ? AND ? = ?"
}
ioseb commented 10 years ago

@realioseb აბა შესაბამისი კომიტი? კომიტის მესიჯში #10 მიაწერე ხოლმე და გაილინკება ავტომატურად სად ვიქექო ასე? :dart:

realioseb commented 10 years ago

სად და როგორ გაილინკება??? :/
აი ეს ფაილია რა

realioseb commented 10 years ago

@ioseb mysqli_stmt_bind_param() და mysqli_stmt_bind_result() რეებს აკეთებენ, შეგიძლიათ რომ ორიოდ სიტყვით ამიხსნათ?

ioseb commented 10 years ago

@realioseb ასეთ რამეს რომ გააკეთებ:

git commit -m "#10 implemented some cool features..." გიტი აიღებს იმ #10 - ს და 1) ლინკად აქცევს; და 2) ამ დისკუსიას მიაბავს ავტომატურად.