inicializace pripojeni na db pres mysqli

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mesiah
Člen | 240
+
0
-

Dobrý den,

začínám s Nette frameworkem a NEchci používat dibi ale mysqli.
Můžete mi poradit co doplnit do bootstrap.php k tomu aby bylo inicializovano pripojeni na db?
Děkuji za odpověď a prosím nepřispívejte příspěvky, v kterých mi budete psát proč používat dibi.

SyXcz
Člen | 75
+
0
-

Mesiah napsal(a):

Dobrý den,

začínám s Nette frameworkem a NEchci používat dibi ale mysqli.
Můžete mi poradit co doplnit do bootstrap.php k tomu aby bylo inicializovano pripojeni na db?
Děkuji za odpověď a prosím nepřispívejte příspěvky, v kterých mi budete psát proč používat dibi.

vždyť dibi umí používat mysqli… nebo se pletu?

SyXcz
Člen | 75
+
0
-

Mesiah napsal(a):

Dobrý den,

začínám s Nette frameworkem a NEchci používat dibi ale mysqli.
Můžete mi poradit co doplnit do bootstrap.php k tomu aby bylo inicializovano pripojeni na db?
Děkuji za odpověď a prosím nepřispívejte příspěvky, v kterých mi budete psát proč používat dibi.

pokud se ti dibi nelíbí… což nechápu proč, tak by bylo lepší se k DB připojovat spíš v base presenteru, do bootstrapu bych to netahal… anebo base modelu.. ostatní presentery (modely) budeš dědit od Base, takže by ti to pak mělo jet všude

Ondřej Mirtes
Člen | 1536
+
0
-

Pokud chceš používat čistě jen mysqli_ funkce z PHP (jakože k tomu není důvod, protože dibi má mysqli driver), tak se v bootstrapu připoj k databázi stejně jako v nějakých procedurálních skriptících.

Ale rozhodně doporučuji použít dibi, řeší za tebe spoustu věcí, má hezčí zápis, ve spojení s Laděnkou na tebe nevykecá žádné citlivé údaje a automaticky máš celou aplikaci ošetřenou proti SQL injection. A taky správně escapované vstupy :)

Mesiah
Člen | 240
+
0
-

Ok, takže by šlo použít něco jako:
$mysqli = new mysqli(Environment::getConfig(‚database‘));
nebo spíš:
$mysqli = new mysqli(„server“, „user“, „pass“, „db“);
budu moct přistupovat k $mysqli jako ke globalní proměnné v rámci celého projektu?

SyXcz
Člen | 75
+
0
-

Mesiah napsal(a):

Ok, takže by šlo použít něco jako:
$mysqli = new mysqli(Environment::getConfig(‚database‘));
nebo spíš:
$mysqli = new mysqli(„server“, „user“, „pass“, „db“);
budu moct přistupovat k $mysqli jako ke globalní proměnné v rámci celého projektu?

spíš bych to vyděl: (bootstrap.php bod 2)

<?php
Environment::loadConfig();
dibi::connect(Environment::getConfig('database'));
?>

v config.ini bys měl mít nastavení pro připojení:

<?php
database.driver = mysqli
database.lazy = TRUE
database.charset = utf8
database.host = localhost
database.database = db
database.username = user
database.password = pass
?>

a ve presenterech i v modelech už budeš používat jen dibi:: viz """:https://dibiphp.com/cs/quick-start":null

PS: projdi si to, dibi ti vážně ulehčí dost zbytečnýho psaní… neni velkej takže ho máš prostudovanej za chvilku, i já ho pochopil za pár minut… :)

Editoval SyXcz (12. 3. 2010 19:02)

Majkl578
Moderator | 1364
+
0
-

Pokud se nepletu, tak jasně řekl, že dibi použít nechce (to, že nechápu proč, je jiná věc).
Když se budu držet myšlenky „k databázi přistupuje pouze model“, můžu použít takovýto BaseModel:

class BaseModel extends /*Nette\*/Object
{
	private static $db = null;

	public function getDb()
	{
		return self::$db === null ? self::$db = new MySQLi(.....) : self::$db;
	}

}

//model
class FooModel extends BaseModel
{
	public function bar()
	{
		$this->db->query(...);//příklad použití mysqli pomocí Nette\Object::__get()
	}
}

SyXcz napsal(a):
spíš bych to vyděl: (bootstrap.php bod 2)

*viděl.
Ale jinak proč ne, řešení pomocí config.ini je elegantní a v Nette optimální.

Editoval Majkl578 (14. 3. 2010 21:19)