| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > нет соединения |
| Автор: sgrey 18.3.2010, 08:35 | ||||||||
есть класс который должен подключаться к базе и делать там определённые вещи. ->
запускаю его из другого класса, откуда берутся данные для добавления в базу, вот этой функцией.
выскакивает ошибка
во-первых имя пользователя не правильное, не знаю откуда оно берётся там..... (такое стоит на форуме, который находится в другой папке на локалхосте). во-вторых пароль к базе имеется и он прописан в конфиге откуда берутся данные. в-третьих если просто в чистом файле написать
то всё прекрасно работает и можно делать выборки, добавлять данные, вобщем всё что надо. что не так с классом? |
| Автор: skyboy 18.3.2010, 09:24 |
| переменная $INFO не доступна из метода make_connection. так своя http://php.net/variables.scope. однако, не стоит принимать поспешных решений и делать $INFO глобальной. вариант 0. передавать $INFO параметром в make_connection вариант 1. брать данные о подключение не из переменной $INFO, а из функции, которая вернет массив с параметрами подключения(функции не ограничены областью видимости переменной) или из http://ru.wikipedia.org/wiki/Одиночка_(шаблон_проектирования) вариант 2. сделать сам объект "подкючение" синглтоном. если, конечно, у тебя только одно подключение к единственной БД. в таком случае, можно инициализировать/передавать $INFO любым из указанных выше способов. все равно это надо будет сделать только раз. |
| Автор: Fortop 18.3.2010, 09:24 | ||
Ну и? Что это за переменные и откуда они берутся? |
| Автор: skyboy 18.3.2010, 16:44 |
$this->conn |
| Автор: sgrey 18.3.2010, 16:49 | ||||||
спасибо, теперь работает. только теперь ошибка в другом месте
мне кажется он ругается вот на эту функцию.... она единственная обращается к этому классу в данный момент....
и хотелось бы использовать переменную из вложенного файла, насколько я понял - если инклуд сделать вне класса, то внутри данные оттуда не видны будут? такое чувство что весь код неправильный ( |
| Автор: sgrey 19.3.2010, 02:05 |
| разобрался с подключением к базе только вот хотелось бы знать что делать с инклудом и почему переменные находятся вне видимости класса........ |
| Автор: Fortop 19.3.2010, 02:42 | ||||
Потому что их нужно ему передавать.
или так
Соответственно конструктор класса или метод connect() должны их принимать и использовать для подключения. |
| Автор: sgrey 19.3.2010, 04:38 | ||
т.е. язык построен так, что если есть функция соединения с базой - нельзя использовать переменные которые не входят в эту функцию? интересно..... пошёл писать хендлер тогда для этого ( |
| Автор: Fortop 19.3.2010, 06:15 | ||
Язык построен так, что можно все. Но использовать глобальные переменные не рекомендуется во избежание проблем. Лучше их передавать явно. |
| Автор: sgrey 19.3.2010, 06:53 | ||
да я вот как раз и думаю про реализацию. думаю по совету skyboy либо синглтон, либо абстрактный класс сделать и наследовать его в этот.... |