Zjištění existence tabulek v DB
- Rellik
- Člen | 104
Zdarvím vespolek,
dá se nějak jednoduše ověřit existence tabulek v DB a podle toho je buď
automaticky vytvořit nebo pokračovat dál, pokud existují?
Vytvoření tabulek v DB mám udělané pomocí funkce
public function getInstall() {
return $this->database->exec('//vytvoření tabulek');
kterou volám ve startup()v BasePresenteru. Tabulky se vytvoří správně,
ale dál už to nejde, jelikož se to vytváření tabulek stále opakuje
i když mají nastaveno „CREATE TABLE IF NOT EXISTS“ což sice znemožní
opětovně tvořit tabulky, ale script se dál nehne.
Prostě bych potřebola tu funkci zavolat jen tehdy, pokud DB nebude obsahovat
žádnou tabulku.
Díky za případnou odpověď. :)
- Rellik
- Člen | 104
Díky za odpovědi. Vytvoření tabulek podle jejich existence už funguje, bohužel stránky i tak vyhodí chybu, protože prý neexistují tabulky v DB přičemž se právě vytvořily a stránka byla přesměrována na další krok:
if ($this->model->isTables() == false) {
$this->model->getInstall();
$this->redirect('Install:');
}
Chyba:
PDOException #42S02
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test_table.users' doesn't exist
Po dalším ručním refreši už to pak jede jak má.
Poradí ještě někdo i s tímto? Díky.
Editoval Rellik (30. 12. 2012 9:50)
- Rellik
- Člen | 104
To vytvoření tabulek je úplně první věc kterou by to mělo udělat. Je v BasePresenteru hned za definováním modelu:
BasePresenter:
public function startup() {
parent::startup();
$this->model = $this->getService('model');
if ($this->model->isTables() == false) {
$this->model->getInstall();
$this->redirect('Install:');
}
//...
Jak říkám, tabulky to vytvoří – kontroluju přímo v DB – přitom se vyhodí ta chyba (neexistující tabulky), která po další refreši zmizí a zobrazí se stránka, která se měla zobrazit.
- enumag
- Člen | 2118
To je zase jedna z těch věcí, která by se jednoduše vyřešila kdyby Connection používalo PDO jako kompozici a ne pomocí dědičnosti. Pak by totiž bylo jednoduché, napsat metodu která by zahodila původní PDO a vytvořila nové, čímž by se připojení k databázi obnovilo. Bohužel tuhle věc už nějakou dobu blokuje @dg aniž by uvedl jakýkoli důvod.
- Rellik
- Člen | 104
Tak sem to vyřešil trošku prasáckým způsobem: Po vytvoření tabulek,
se to přesměruje na samostatný soubor, kde je výpis o úspěšné instalaci
a odkaz na dokončení instalace vytvořením hlavního administrátora. Tím
pádem se obnoví i připojení k DB a tak se už dál provádí vše jak by
mělo.
Takže díky za rady a kdyby někoho napadlo elegantnější řešení, tak
písnětě. :)