Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема SQLite
 
 автор: MHz   (12.02.2011 в 11:49)   письмо автору
 
 

Помогите разобраться, не пойму в чем проблема.

Заранее создал таблицу в БД:

$db = new SQLiteDatabase (DATABASE_PATH);
$db->query ("CREATE TABLE PAGES  (
    ID INTEGER PRIMARY KEY, Name TEXT, Title TEXT)");


Пытаюсь вставить запись в таблицу:

...
        $Database = new SQLiteDatabase (DATABASE_PATH);
        
        if (is_null ($this->Config['ID']))
        {
            $Query = "INSERT INTO PAGES VALUES(null, '".$this->Config['Name']."', '".$this->Config['Title']."');";
            #echo $Query;
            $Database->query ($Query);
}
...


Говорит что не может найти таблицу PAGES
Warning: SQLiteDatabase::query() [sqlitedatabase.query]: no such table: PAGES in ...


В чем может быть проблема? Таблица ведб существует О_о

  Ответить  
 
 автор: Trianon   (12.02.2011 в 12:20)   письмо автору
 
   для: MHz   (12.02.2011 в 11:49)
 

>В чем может быть проблема? Таблица ведб существует О_о

Откуда такая уверенность?
Вы проверили успешность создания таблицы ?
Обнаружили её имя в мета-таблице SQLITE_MASTER ?

  Ответить  
 
 автор: MHz   (12.02.2011 в 13:52)   письмо автору
 
   для: Trianon   (12.02.2011 в 12:20)
 

Хм... А может быть причиной проблемы то что я выполняю запись в БД в деструкторе класса?

  Ответить  
 
 автор: Trianon   (12.02.2011 в 13:57)   письмо автору
 
   для: MHz   (12.02.2011 в 13:52)
 

Крайне маловероятно, что эти две вещи как-то связаны.
Если только это деструктор не вызван уже после того, как закрыт сам объект SqLite
D любом случае проверка состояния вызова SqLite-функций даст знать если что не так.

  Ответить  
 
 автор: MHz   (12.02.2011 в 14:09)   письмо автору
 
   для: Trianon   (12.02.2011 в 13:57)
 


define ('DATABASE_PATH', 'Database.db');

/*
$Database = new SQLiteDatabase (DATABASE_PATH);
$CreateTable = $Database->Query ("CREATE TABLE Pages (ID INTEGER PRIMARY KEY, Name TEXT,
                                  Title TEXT, Keywords TEXT, Description TEXT, Status TEXT)");
if (!$CreateTable) exit('Таблица не создана!');
*/

class SetPage
{
    private $Config = array ();
    
    public function __construct ($PageID = NULL)
    {
        $this->Config['ID'] = $PageID;
    }
    
    public function SetName ($Name)
    {
        $this->Config['Name'] = $Name;
    }
    
    public function SetTitle ($Title)
    {
        $this->Config['Title'] = $Title;
    }
    
    public function SetKeywords ($Keywords)
    {
        $this->Config['Keywords'] = $Keywords;
    }
    
    public function SetDescription ($Description)
    {
        $this->Config['Description'] = $Description;
    }
    
    public function SetStatus ($Status)
    {
        $this->Config['Status'] = $Status;
    }
    
    public function __destruct ()
    {
        $Database = new SQLiteDatabase (DATABASE_PATH);
        
        if (is_null ($this->Config['ID']))
        {
            $InsertRecord = $Database->Query ("INSERT INTO Pages VAlUES 
            (NULL, '".$this->Config['name']."', '".$this->Config['Title']."', '".$this->Config['Keywords']."',
            '".$this->Config['Description']."', '".$this->Config['Status']."')");
            if (!$InsertRecord) exit ('ты плАхой программист!');
        }
        
        if (is_numeric ($this->Config['ID']))
        {
            /*
             *
             */
        }
    }
}

$test = new SetPage (NULL);
$test->SetName("Имя страницы");
$test->SetTitle("Заголовок страницы");
$test->SetKeywords("Ключевые слова страницы");
$test->SetDescription("о страницы");
$test->SetStatus("Статус страницы");
#$test->Write();


Если __destruct я переименую в Write (), то все работает, иначе не может найти тамблицу.
Все же это нельзя сделать в деструкторе или я что-то делаю не правильно?

  Ответить  
 
 автор: Trianon   (12.02.2011 в 14:17)   письмо автору
 
   для: MHz   (12.02.2011 в 14:09)
 

а где Вы уничтожаете экземпляр класса?
И где проверки создания объекта?

И почему-то кажется, что диагностика ошибок php у Вас заблокирована.


PS..
Ожидать успешного подключения после того, как сам php-скрипт успел благополучно загнуться ... довольно наивно.
Дело тут не в деструкторе как таковом.

  Ответить  
 
 автор: MHz   (12.02.2011 в 14:39)   письмо автору
 
   для: Trianon   (12.02.2011 в 14:17)
 

Я пока пытаюсь разобраться с самой записью. Имеются ввиду проверки объекта SQLiteDatabase? Ну если бы он не существовал, то не выдавал бы предупреждение что таблица не найдена. Да и до выполнения самого запроса дело доходит ведь

  Ответить  
 
 автор: MHz   (12.02.2011 в 16:49)   письмо автору
 
   для: MHz   (12.02.2011 в 14:39)
 

Ладно, нет времени разбираться, создам отдельный метод для записи. Спасибо за помощь! Если все же кто-то объяснит причину проблемы, буду благодарен. :-)

  Ответить  
 
 автор: Trianon   (12.02.2011 в 16:52)   письмо автору
 
   для: MHz   (12.02.2011 в 16:49)
 

последней строкой unset($test);

  Ответить  
 
 автор: MHz   (12.02.2011 в 17:01)   письмо автору
 
   для: Trianon   (12.02.2011 в 16:52)
 

Ох , ты ж ёжик... Как все просто. Получается __destruct () выполняется только при уничтожении объекта. Большое спасибо!

  Ответить  
 
 автор: Trianon   (12.02.2011 в 17:10)   письмо автору
 
   для: MHz   (12.02.2011 в 17:01)
 

Я ж Вас спрашивал

а где Вы уничтожаете экземпляр класса?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования