Mysql Каким образом сделать одно подключение к mysql и 1 выбор базы данных на все веб-приложение?

VVWind

Новичок
Создал класс, подключил в главный файл index.php, активировал функцию, где идет подключение.
Но при подгрузке php страниц, при подключении даже в index.php выскакивает ошибка "no database selected!".

Как правильно делать одно на все веб-приложение подключение к mysql?
 

VVWind

Новичок
У меня уже много соединений и запросов к mysql, т.е. все работает, просто узнал недавно, что подключение можно сделать одно на все веб-приложение, вместо каждый раз подключаться и закрывать в каждом маленьком обращении к базе.
Вот код файла с классом:

PHP:
<?php
session_start();
class Collector {
    var $connection;
    var $database;
    function establishConenction () {
        $this->connection = mysql_connect($_SESSION['host'], $_SESSION['dbuser'], $_SESSION['rootpass']);
        $this->database = mysql_select_db($_SESSION['db']);
    }
}
?>
Вот код в index.php, подключающий класс и включающий его функцию.

PHP:
include "mainClass.php";
$Collector = new Collector();
$Collector->establishConenction();
А вот код подключения к базе. Он останавливает весь скрипт в index.php и выдает no database selected

PHP:
<?php
                    $request = mysql_query("select * from employees") or die(mysql_error());
                    if (mysql_num_rows($request)==0) {
                        echo ("<li>Пока что нет ни одного сотрудника!</li>");
                    }else {
                        while ($info = mysql_fetch_array($request)) {
                            echo ("<li onclick=\"List.Change.Debts(".$info['id'].", 'employee')\">".$info['surname']." ".$info['name']." ".$info['patronymic']."</li>");
                        }
                    }
                ?>
 

Фанат

oncle terrible
Команда форума
мне ужасно интересно знать ответ на два вопроса:
почему ты через сессию передаёшь параметры подключения?
и для чего вообще нужен класс Collector?

ну и самый тупой вопрос - видишь ли ты ошибки РНР? База-то вообще выбирается?
 

VVWind

Новичок
Сомневаюсь, что ужасно интересно.

Через сессию потому что у меня более 30 подключений везде, где только можно было их вставить. Менять вручную каждый раз было бы накладно.
Поэтому достаточно через сессию передавать данные.

Класс Collector нужен для моего воспаленного мозга, который считает, что ООП делает все более структурировано и понятно. Хотя я уже сделал приложение "быдлокодом" без классов, я все еще пытаюсь как-то что-то где-то.

Ошибка должна быть, но выглядит так, словно подключение действует на один единственный скрипт в файле класса Collector.
Добавил die(mysql_error)
Никаких ошибок. Странно.
 

Фанат

oncle terrible
Команда форума
как раз наоборот - очень интересно.
сессия нужна для передачи данных между обращениями к скриптам. внутри одного и того же скрипта сессия не нужна. передавать надо через обычную переменную. и потом, ты же сказал, что у тебя осталось только одно место подключения? В любом случае, сессию надо убрать.

класс на две строчки ничего не делает структурированным и понятным. как раз наоборот - бессмысленный код только мешает.

по делу. отучайся писать каракули.
Код надо КОПИРОВАТЬ, а не черкать пару слов, чтобы отвязались.
куда добавил die(mysql_error)? в каком виде добавил?

если всё-таки добавил нормально, то, скорее всего, ты инклюдишь свои файлы через http.
ну, или какая-то ещё дурацкая ошибка.

сократи код index.php до 10 строчек, и если все равно не будет работать - запость его сюда.
 

VVWind

Новичок
Я идиот. Конечно я идиот.
Я оставил все подключения и закрытия, думая, что то, что они привязаны к другим переменным, не трогает подключение из класса.
Убрав все подключения и оставив единственное через класс, я увидел, как все заработало.
Спасибо за помощь.

С другой стороны, как быть с файлами, которые подгружаются? К примеру, с помощью jquery load.
Они все еще показывают no database selected.
Или надо подобные косяки искать во всех подгружаемых файлах? (в подгружаемом тоже убрал подключение и отключение)
 

Фанат

oncle terrible
Команда форума
точно так же, как с любыми другими.
include "dbconn.php";

внутри dbconn.php 2 строчки:
mysql_connect(...);
mysql_select_db(...);
 

Фанат

oncle terrible
Команда форума
это всё конечно ужасно, и лучше бы сделать по-другому, но - хоть так.
 

VVWind

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

Фанат

oncle terrible
Команда форума
функции mysql_ и иже с ними - это как сырые продукты.
Никто не жуёт сырое мясо, запивая кипятком, вместо супа.
так и здесь.
эти функции должны быть использованы не напрямую, с помощью класса или хотя бы пользовательской функции, которая будет делать всю черновую работу.

нельзя при ошибках убивать всё приложение, как это делаешь ты.

надо разделять получение данных и их отображение.
сначала получать, потом, если всё хорошо - показывать.
если не всё хорошо, то показывать аккуратное сообщение об ошибке. только не mysql_error(), поскольку пользователю она ничего не скажет, а ты её не увидишь, а просто общее сообщение "извините, у нас проблемы". а ошибки должны записываться в лог, чтобы ты мог их потом увиидеть
 
Сверху