Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> дескриптор БД mysqli, пропадание дескриптора БД 
:(
    Опции темы
patience
Дата 4.6.2009, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 18.9.2006

Репутация: нет
Всего: нет



Доброго времени суток.

mysqli - процедурный стиль

Класс
Код

class Query {

        // link
    private $dbLink;
...
}


Query отвечает за выполнения запросов к БД и их выдачу.
При создании в конструкторе класса свойству $dbLink устанавливается дескриптор открытого соединения с БД.

загвостка в следующем:

1) создаем объект Query
2) выполняем запрос к БД используя созданный на 1) объект
-- все хорошо до сих пор
3) выполняем ещё один запрос к БД (сразу же после предыдущего) используя тот же созданный объект на шаге 1)
конечно при этом запросе используется link ($dbLink) к БД (тот самый который был установлен при создании объекта Query)
и вот тут получаем сообщение - Warning: mysqli_insert_id() expects parameter 1 to be mysqli, null given
mysqli_insert_id() - передается тот самый $dbLink


На сервере хостера все работает без предупреждений, на локальной машине появляется сообщение.
В чем может быть дело?

Заранее благодарен за помощь.

PM MAIL   Вверх
Severyanin
Дата 4.6.2009, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



А первый запрос возвращает то. что надо? Код класса и обращения к нему приведите, пожалуйста


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
patience
Дата 4.6.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 18.9.2006

Репутация: нет
Всего: нет



Возвращает то что надо. Как я говорил все отлично работает на сервере-хостера, на локальном хосте проблема.


Код


class Query {

    
    private $queryLink;

    
    private $dbLink;

    private $queryError;


    private $statement;

    private $hasResults;

    private $isFetchable;

    private $isBuffered = true;
    
    public function __construct($sql,$dbLink,$isUnbuffered = null) {

    
        $this->statement = $sql;        
        
        
        $this->queryLink = mysqli_query($dbLink,$sql,$isUnbuffered ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT);
        if (!$this->queryLink) {
            $this->queryError = mysqli_error($dbLink);
            return;
        }
        

        $this->isBuffered = !$isUnbuffered;
        $this->dbLink = $dbLink;


        $this->isFetchable = isset($this->queryLink->num_rows);


        if($this->isFetchable) {
            $this->hasResults = $this->queryLink->num_rows>0;
        }

    }

    public function getInsertID() {         
        $f = strtolower($this->statement[0]);       
        if($f=='i'||$f=='r')
        return mysqli_insert_id($this->dbLink);
        return null;
    }

    public function getTotalRows() {
        if($this->queryError) {
            return null;
        }


        if($this->isFetchable) {
            $total = $this->queryLink->num_rows;
                } else {
            $total = mysqli_affected_rows($this->dbLink);
                }


        return $total > 0 ? $total : 0;
    }

...
}


к примеру
$sql - insert запрос

Код

$q = new Query($sql, $link_to_db);
$q->getTotalRows();
$q->getInsertID();

PM MAIL   Вверх
Severyanin
Дата 5.6.2009, 04:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



patience, а $link_to_db получаете заранее? В остальных методах соединение не закрываете? Что после каждого вызова метода  нходится в свойствах класса?


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.