Přihlásit

Blog

Vývojářský deníček #4

Date 2011-08-07 14:19:50 | napsal Martin Pernica

Minule jsme již lehce nakousli knihovnu VDatabase, nyní v tom budeme pokračovat. Podíváme se na základní ovladače obsažené v systému, čisté query, fluent rozhraní a na prepare query.



VDatabase – Ovladače

V základu verze VDatabase obsažená ve VisionCMS 1.0 obsahuje dva ovladače na MySQL – klasický mysql ovladač postavený na funkcích mysql_* a mysqli ovladač postavený na mysqli rozhraní (rychlejší). Poté obsahuje jeden ovladač na SQLite databázi, který je ještě ve fázi testování. Ale pokud jste programátor, tak není problém si dopsat vlastní ovladač, protože rozhraní pro implementaci ovladače je jednoduché.

VDatabase – Query

VDatabase obsahuje tři způsoby, jak můžete odeslat svůj dotaz do databáze a my začneme tím nejzákladnějším a to je čistý dotaz.

<?php

class Components_Test_Model extends Vision_Model
{
    public function getCake()
    {
    	$result = $this->dbo->query("SELECT cake FROM #table")->fetch();
    	return $result['cake'];
    }
}

Klasický SELECT query do databáze, nic těžkého. Také můžete escapovat proměnné pokud potřebujete.

<?php

class Components_Test_Model extends Vision_Model
{
    public function getCake($lie = "not")
    {
    	$result = $this->dbo->query("SELECT cake FROM #table WHERE lie = '" . $this->dbo->escape($lie) . "'")->fetch();
    	return $result['cake'];
    }
}

Ale jedná se o čisté odeslání dotazu do databáze, knihovna Vám nebude zasahovat nijak do dotazu, pouze v případě potřeby doplní prefix za zástupný znak.

VDatabase – Prepare query

Určitě lepším způsobem jak odeslat dotaz do databáze je použít VDatabase Prepare query. Tento způsob je velice podobný klasickému dotazu, jen s tím rozdílem že si předem připravíme dotaz, ve kterém budou proměnné, které do něj dosadíme až později s automatickým ošetřením.

<?php

class Components_Test_Model extends Vision_Model
{
    public function getCake($lie = "not")
    {
    	$prepare = $this->dbo->prepare("SELECT cake FROM #table WHERE lie = ? AND id = ?");
    	$prepare->bind("si", $lie, 1);
    	
    	$result = $prepare->fetch();
    	return $result['cake'];
    }
}

Odeslali jsme stejný select dotaz jen s tím rozdílem že jsme ošetření nechali na knihovně a proměnné dosadili až v průběhu.

VDatabase – Fluent rozhraní

Asi nejlepší možnost pro odesílání dotazů do databáze je použití fluent rozhraní. Dotaz prakticky nepíšete, pouze používáte metody s názvy klíčových slov SQL. Kód vypadá mnohem lépe a dle mého názoru i čitelněji. Fluent rozhraní doplní i automaticky prefix a ošetří i proměnné.

<?php

class Components_Test_Model extends Vision_Model
{
    public function getCake($lie = "not")
    {
    	$result = $this->dbo->select("cake")->from("table")->where("lie = %s", $lie, "%and", "id = %i", 1);
    	return $result['cake'];
    }
}

Krásné, že?

 

V dalším díle, který bude brzy, se podíváme na napsání vlastní Hello World komponenty.

 


Váš názor je pro nás směrodatný!

Nebojte se a napište nám Váš názor na naše fórum!

I Vaše nápady se mohou promítnout v nové verzi VisionCMS!

Sdílejte na: