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

Форум PHP

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

 

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

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

тема: Подключение к бд через PDO
 
 автор: (Sandr)   (29.08.2011 в 23:36)   письмо автору
 
 

Вот у меня скрипт состоит из множества файлов.
Пример главной
<?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". В сети нашёл, но половина вообще не очём, а другая половина слишком сложна для меня..

Не подскажете, что делать?

  Ответить  
 
 автор: sl1p   (30.08.2011 в 00:06)   письмо автору
 
   для: (Sandr)   (29.08.2011 в 23:36)
 

вникнуть в Паттерн Registry:)

кхм.. либо не вникайте а подключайте файл с пдо конектом.. и в начале функций где вы используете этот самый пдо делайте так:
global $dbConnect;

но это не самый лучший вариант, лучше таки вникнуть в паттерн.

что, к примеру, тут может быть не ясно, я не знаю:)
http://alexmuz.ru/php-registry/

  Ответить  
 
 автор: (Sandr)   (30.08.2011 в 00:52)   письмо автору
 
   для: sl1p   (30.08.2011 в 00:06)
 

Именно эту ссылку мне и дали))
Просто, видимо, проблемой является плохое знание ООП в пхп.

  Ответить  
 
 автор: (Sandr)   (30.08.2011 в 00:53)   письмо автору
 
   для: sl1p   (30.08.2011 в 00:06)
 

Не могли бы вы показать пример для моего случая?

  Ответить  
 
 автор: sl1p   (30.08.2011 в 02:26)   письмо автору
 
   для: (Sandr)   (30.08.2011 в 00:53)
 

да тут не особо даже ООП. Этот паттерн, скажем так, глобальное хранилище используемых вами объектов в проэкте.

Если вы используете
$dbConnect = new PDO

тогда $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(...); // и т.д.

таким образом в этот класс можно ложить всё что глобально необходимо в проэкте, не только коннект к базе данных.

  Ответить  
 
 автор: (Sandr)   (30.08.2011 в 11:24)   письмо автору
 
   для: sl1p   (30.08.2011 в 02:26)
 

Спасибо большое, кажется до меня дошло))

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

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