|
|
|
| Вот у меня скрипт состоит из множества файлов.
Пример главной
<?php session_start();
require_once $_SERVER['DOCUMENT_ROOT'].'/connect.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/config.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/func.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/class.php';
...
...
...
?>
Так вот, при обычном подключении к бд, т.е. при
$connect = mysql_connect('localhost','username','123') or die('Не удалось подключиться к базе данных!'." /r/n ".mysql_error());
mysql_select_db('base',$connect) or die('Не удалось выбрать базу!'." /r/n ".mysql_error());
mysql_query('SET NAMES `utf8`');
Я инклудил этот файл (connect.php) и дальше работал с базой. Но после того, как изменил подключение на
$dbConnect = new PDO("mysql:host=localhost; dbname=base",$name, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
то стало выдавать ошибку типа Fatal error: Call to a member function prepare() on a non-object in Z:\home\test1.ru\www\func.php on line 94
Приходится чуть ли не в каждом файле прописывать строку подключения.
Это выдает, когда я обращаюсь к методам пдо из какого либо класса.
Один человек мне подсказал поискать про "Паттерн Registry". В сети нашёл, но половина вообще не очём, а другая половина слишком сложна для меня..
Не подскажете, что делать? | |
|
|
|
|
|
|
|
для: (Sandr)
(29.08.2011 в 23:36)
| | вникнуть в Паттерн Registry:)
кхм.. либо не вникайте а подключайте файл с пдо конектом.. и в начале функций где вы используете этот самый пдо делайте так:
но это не самый лучший вариант, лучше таки вникнуть в паттерн.
что, к примеру, тут может быть не ясно, я не знаю:)
http://alexmuz.ru/php-registry/ | |
|
|
|
|
|
|
|
для: sl1p
(30.08.2011 в 00:06)
| | Именно эту ссылку мне и дали))
Просто, видимо, проблемой является плохое знание ООП в пхп. | |
|
|
|
|
|
|
|
для: sl1p
(30.08.2011 в 00:06)
| | Не могли бы вы показать пример для моего случая? | |
|
|
|
|
|
|
|
для: (Sandr)
(30.08.2011 в 00:53)
| | да тут не особо даже ООП. Этот паттерн, скажем так, глобальное хранилище используемых вами объектов в проэкте.
Если вы используете
тогда $dbConnect не будет доступна в функциях и методах, потому что она локальная.
В этом случае, вы копируете class Registry (http://alexmuz.ru/php-registry/) и подключаете его как "мастхев" на любой странице (я так понимаю конект к базе у вас в connect.php поэтому подключать класс нужно до конекта).
В файле коннекта пишете к примеру так:
<?
Registry::set('db', new PDO("mysql:host=localhost; dbname=base",$name, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")));
// вы положили коннект к базе в глобальное хранилище
|
И потом, во всех функция и неважно где вы вызываете коннект, пишете так:
<?
$db = Registry::get('db');
// в переменную $db вы получаете уже ранее подключенный конект
$db->query(....); // и т.д.
|
или так:
<?
Registry::get('db')->query(...); // и т.д.
|
таким образом в этот класс можно ложить всё что глобально необходимо в проэкте, не только коннект к базе данных. | |
|
|
|
|
|
|
|
для: sl1p
(30.08.2011 в 02:26)
| | Спасибо большое, кажется до меня дошло)) | |
|
|
|