[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: НЕ могу понять)))
Гость_Влад
Есть код.

define('DEBUG',true);
require_once 'library/factory.php';

require_once 'library/database/mysqli.php';
require_once 'includes/config.php';


$db = new SDatabase( Sconfig::getDatabaseSettings( 'base1' ) );
$db2 = new SDatabase( Sconfig::getDatabaseSettings( 'base2' ) );

$row = $db->get_query_object( 'SELECT id FROM table WHERE id=1' );
$row2 = $db2->get_query_object( 'SELECT id FROM table WHERE id=1' );


Вопрос: почему db это тоже самое, что и db2? А если создавать объекты в отдельных функциях то всё нормально работает (если короче - почему нельзя использовать их одновременно).



Спустя 13 часов, 52 секунды (26.11.2010 - 09:25) linker написал(а):
А в чем должна быть разница между db и db2?

Спустя 9 минут, 2 секунды (26.11.2010 - 09:34) sergeiss написал(а):
Цитата (Гость_Влад @ 25.11.2010 - 21:24)
Есть код.

Хороший код, красивый такой smile.gif

Вот только надо разбираться именно с той библиотекой, которую ты используешь.

Цитата (Гость_Влад @ 25.11.2010 - 21:24)
Вопрос: почему db это тоже самое, что и db2?

Даже совершенно не зная эту твою библиотеку, можно предположить, что это разные объекты. Так что твой вопрос не понятен.

Спустя 3 часа, 47 минут, 28 секунд (26.11.2010 - 13:21) Гость_Влад написал(а):
разница между этими объектами заключается в том, что это два разных объекта класса работы с базой данных. При чём когда они создаются, классу передаются параметры соединения для разных баз. Если короче, я хочу использовать в скрипте две, а может больше, баз данных.

Пример кода я упростил. на деле имеется класс Factory в котором имеется метод, пусть будет getDB, в этом методе имеется статическая переменная (массив).


class SFactory{

function &getDB( $name = 'default' ){
static $instances = array();
if( !array_key_exists( $name, $instances ) ){
$instances[$name] = new SDatabase( Sconfig::getDatabaseSettings( $name ) );
}
return $instances[$name];
}

}


$db =& SFactory::getDB( 'base1' );

И сколько бы я объектов не созавал бы, всё равно все они будут одинаковые.

Спустя 2 минуты, 31 секунда (26.11.2010 - 13:24) sergeiss написал(а):
Цитата (Гость_Влад @ 25.11.2010 - 21:24)
(если короче - почему нельзя использовать их одновременно).

Так я и не понял до сих пор: почему ты так решил? Может быть, библиотека "кривая" или ты их неправильно используешь?

Спустя 2 минуты, 26 секунд (26.11.2010 - 13:26) Гость_Влад написал(а):
Вернее даже будет сказать, что не одинаковые, а соеденяются с одной базой.
Объекты разные, база одна и та же. Как сделать.
Сразу хочу сказать, что четвёртый параметр mysql_connect() поставленный в true не помогает.

Спустя 19 минут, 17 секунд (26.11.2010 - 13:46) linker написал(а):
class SFactory
{
protected static $instances = array();

function getDB($name = 'default')
{
return !isset(self::$instances[$name])
?
self::$instances[$name] = new SDatabase(Sconfig::getDatabaseSettings($name))
:
self::$instances[$name];
}
}


$db = SFactory::getDB('base1');

Спустя 1 минута, 4 секунды (26.11.2010 - 13:47) sergeiss написал(а):
Ну так и что, что БД одна и та же? Подключения-то разные!!! С точки зрения скрипта работа с ними идет как с разными БД. А то, что результаты одинаковые возвращаются... Так было бы странно, если бы было по-другому.

...или я что-то недопонял?

Спустя 8 минут, 45 секунд (26.11.2010 - 13:55) Гость_Влад написал(а):
Цитата (sergeiss @ 26.11.2010 - 10:47)
...или я что-то недопонял?

Не понял. Я передаю классу базы настройки для подключения к разным базам.

Спустя 47 минут, 10 секунд (26.11.2010 - 14:43) linker написал(а):
Вот жеж
class SFactory
{
protected static $instances = array();

public static function getDB($name = 'default')
{
return !isset(self::$instances[$name])
?
self::$instances[$name] = new SDatabase(Sconfig::getDatabaseSettings($name))
:
self::$instances[$name];
}
}


$db = SFactory::getDB('base1');

Спустя 2 часа, 47 минут, 14 секунд (26.11.2010 - 17:30) Animir написал(а):
Цитата (linker @ 26.11.2010 - 11:43)
Sconfig::getDatabaseSettings($name)

покажите эту функцию

Спустя 28 минут, 37 секунд (26.11.2010 - 17:58) Гость_Влад написал(а):
Так тоже не работает. Ничего же ведь не изменилось. Просто ты массиввынес из метода.

$db = SFactory::getDB('base1');
$db2 = SFactory::getDB('base2');
здесь код в котором оба объекта работают с base2;


Спустя 26 секунд (26.11.2010 - 17:59) Guest написал(а):
Цитата (Animir @ 26.11.2010 - 14:30)
Цитата (linker @ 26.11.2010 - 11:43)
Sconfig::getDatabaseSettings($name)

покажите эту функцию


class Sconfig{


function getdatabaseSettings($name){
$databases = array( 'base1' => array('name'=>'base','user'=>'user','password'=>'password','host'=>'localhost','use'=>true),
'base2' => array('name'=>'base2','user'=>'user','password'=>'password','host'=>'localhost','use'=>true)
);

return $databases[$name];
}
}


Спустя 44 минуты, 53 секунды (26.11.2010 - 18:44) Гость_Влад написал(а):
всем спасибо))) mysql класс кривоват был))))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.