Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

SSO, a zastosowanie przy bazie danych


Rekomendowane odpowiedzi

Opublikowano (edytowane)

Witam, w jaki sposób mogę za pomocą SSO (Single Sign On) stworzyć dodatkowe połączenie z inną bazą? Chodzi o to żeby po prostu mieć połączenie z inną bazą gdzie znajdują się tabele z gry ^_^

I ew. jak potem korzystać z tego w praktyce.

Z góry dzięki za pomoc.

Edytowane przez pziemczyk
Opublikowano

To znaczy generalnie nie wiem jak się za to zabrać, od tego trzeba zacząć, heh.

  • Manager
Opublikowano

To skąd czerpiesz takie mądre skróty, jak SSO? :P

Wiesz, chętnie pomogę, ale szukać tego, myśleć od początku to na pewno nie ten dział. Weź coś poniuchaj..

Anyway, wracając do tematu, opis podany na stronie, do której linkujesz wg mnie jest dobrym początkiem, no, ale jak mówię - nie dla mnie ( nas ). Inwencja panie kolego, inwencja!

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

To znaczy generalnie to nie mam pojęcia jak by tu otworzyć drugie połączenie mysql, jeżeli po prostu dam mysql_connect to urwie mi poprzednie połączenie chyba.

  • Manager
Opublikowano

Aa to mów tak! :P

Niuchaj kod:

public function test_connect($app)
{
	if (!file_exists(IPS_KERNEL_PATH . 'classDb' . ucwords($app['db_driver']) . '.php'))
	{
		return 'Invalid driver';
	}

	require_once( IPS_KERNEL_PATH . 'classDb' . ucwords($app['db_driver']) . '.php' );

	$classname = "db_driver_".$app['db_driver'];

	$DB = new $classname;

	$DB->obj['sql_database']   = $app['db_db'];
	$DB->obj['sql_user']	   = $app['db_user'];
	$DB->obj['sql_pass']	   = $app['db_pass'];
	$DB->obj['sql_host']	   = $app['db_host'];
	$DB->obj['sql_charset']	   = $app['db_charset'];

	define( 'SQL_DRIVER'              , $app['db_driver'] );
	define( 'IPS_MAIN_DB_CLASS_LOADED', TRUE );

	/* Required vars? */
	if ( is_array( $DB->connect_vars ) and count( $DB->connect_vars ) )
	{
		foreach( $DB->connect_vars as $k => $v )
		{
			$DB->connect_vars[ $k ] = ( isset( $app[ $k ] ) ) ? $app[ $k ] : ipsRegistry::$settings[ $k ];
		}
	}

	$DB->return_die = true;

	if ( ! $DB->connect() )
	{
		return $DB->error;
	}
	else
	{
		return true;
	}

}

Generalnie zamiast db_driver dajesz mysql.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

Wklejam to do swojej aplikacji czy gdzieś do plików IPB?

Opublikowano

Objaśniłbyś jak z tego korzystać?

Z góry dzięki.

Opublikowano

Zobacz

<?php

class L2Lib
{
public function additional_connect($app)
{
	if (!file_exists(IPS_KERNEL_PATH . 'classDb' . ucwords($app['mysql']) . '.php'))
	{
		return 'Invalid driver';
	}

	require_once( IPS_KERNEL_PATH . 'classDb' . ucwords($app['mysql']) . '.php' );

	$classname = "db_driver_".$app['mysql'];

	$L2DB = new $classname;

	$L2DB->obj['sql_database']   = $app['db_db'];
	$L2DB->obj['sql_user']       = $app['db_user'];
	$L2DB->obj['sql_pass']       = $app['db_pass'];
	$L2DB->obj['sql_host']       = $app['db_host'];
	$L2DB->obj['sql_charset']    = $app['db_charset'];

	define( 'SQL_DRIVER'              , $app['mysql'] );
	define( 'IPS_MAIN_DB_CLASS_LOADED', TRUE );

	/* Required vars? */
	if ( is_array( $L2DB->connect_vars ) and count( $L2DB->connect_vars ) )
	{
		foreach( $L2DB->connect_vars as $k => $v )
		{
			$L2DB->connect_vars[ $k ] = ( isset( $app[ $k ] ) ) ? $app[ $k ] : ipsRegistry::$settings[ $k ];
		}
	}

	$L2DB->return_die = true;

	if ( ! $L2DB->connect() )
	{
		return $L2DB->error;
	}
	else
	{
		return true;
	}
}

static public function loadOnlinePlayers()
{
	$db = ipsRegistry::DB();

	// Tutaj chciałbym zmienić na to drugie połączenie.
	$db->query('SELECT online FROM characters WHERE owner='.intval($member_id));
	$db->execute();
}
}

?>

Opublikowano

Generalnie to nie mam pojęcia jak to zastosować w o np. w tej funkcji którą podałem w poście wyżej.

  • Manager
Opublikowano

Zupełnie pisane na kolanie:

<?php

class L2Lib
{
       public function additional_connect($app)
       {
               if (!file_exists(IPS_KERNEL_PATH . 'classDb' . ucwords($app['mysql']) . '.php'))
               {
                       return 'Invalid driver';
               }

               require_once( IPS_KERNEL_PATH . 'classDb' . ucwords($app['mysql']) . '.php' );

               $classname = "db_driver_".$app['mysql'];

               $L2DB = new $classname;

               $L2DB->obj['sql_database']   = $app['db_db'];
               $L2DB->obj['sql_user']       = $app['db_user'];
               $L2DB->obj['sql_pass']       = $app['db_pass'];
               $L2DB->obj['sql_host']       = $app['db_host'];
               $L2DB->obj['sql_charset']    = $app['db_charset'];

               define( 'SQL_DRIVER'              , $app['mysql'] );
               define( 'IPS_MAIN_DB_CLASS_LOADED', TRUE );

               /* Required vars? */
               if ( is_array( $L2DB->connect_vars ) and count( $L2DB->connect_vars ) )
               {
                       foreach( $L2DB->connect_vars as $k => $v )
                       {
                               $L2DB->connect_vars[ $k ] = ( isset( $app[ $k ] ) ) ? $app[ $k ] : ipsRegistry::$settings[ $k ];
                       }
               }

               $L2DB->return_die = true;

               if ( ! $L2DB->connect() )
               {
                       return $L2DB->error;
               }
               else
               {
                       return true;
               }
       }

       static public function loadOnlinePlayers()
       {
               $loadConnection	= array(
									'db_db'			=> '', # Nazwa bazy danych
									'db_user'		=> '', # Nazwa usera
									'db_pass'		=> '', # Haslo
									'db_host'		=> '', # Host bazy
									'db_charset'		=> '', # Pozostaw w sumie puste
									'mysql'			=> 'mysql',
			);

			self::additional_connect( $loadConnection );

               // Tutaj chciałbym zmienić na to drugie połączenie.

               $online = $L2DB->buildAndFetch( array(
								'select' 	=> 'online',
								'from'		=> 'characters',
								'where'		=> 'owner=' . intval( $member_id )
			) );

				echo $online['online'];
       }
}

?>

NIE testowane.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano (edytowane)

Błędzik

Fatal error: Call to a member function query() on a non-object in /var/www/board/fakemmo/applications_addon/other/game/sources/classes/gamelib.php on line 61

A tutaj kod

<?php

class GameLib
{
	static public function sql_connect($app)
       {
		if (!file_exists(IPS_KERNEL_PATH . 'classDb' . ucwords($app['mysql']) . '.php'))
		{
			return 'Invalid driver';
		}

		require_once( IPS_KERNEL_PATH . 'classDb' . ucwords($app['mysql']) . '.php' );

		$classname = "db_driver_".$app['mysql'];

		$L2DB = new $classname;

		$L2DB->obj['sql_database']   = $app['db_db'];
		$L2DB->obj['sql_user']       = $app['db_user'];
		$L2DB->obj['sql_pass']       = $app['db_pass'];
		$L2DB->obj['sql_host']       = $app['db_host'];
		$L2DB->obj['sql_charset']    = $app['db_charset'];

		define( 'SQL_DRIVER'              , $app['mysql'] );
		define( 'IPS_MAIN_DB_CLASS_LOADED', TRUE );

		/* Required vars? */
		if ( is_array( $L2DB->connect_vars ) and count( $L2DB->connect_vars ) )
		{
			foreach( $L2DB->connect_vars as $k => $v )
               {
				$L2DB->connect_vars[ $k ] = ( isset( $app[ $k ] ) ) ? $app[ $k ] : ipsRegistry::$settings[ $k ];
			}
		}

		$L2DB->return_die = true;

		if ( ! $L2DB->connect() )
		{
			return $L2DB->error;
		}
		else
		{
			return true;
		}
       }

	static public function getMemberCharacters( $member_id, $data='account_name' )
	{
		$loadConnection = array(
			'db_db'                 => 'l2jdb', # Nazwa bazy danych
			'db_user'               => 'root', # Nazwa usera
			'db_pass'               => 'n1d9r7c4', # Haslo
			'db_host'               => 'localhost', # Host bazy
			'db_charset'            => '', # Pozostaw w sumie puste
			'mysql'             	=> 'mysql',
		);

		self::sql_connect( $loadConnection );

		$L2DB->query('SELECT c.account_name'.(empty($data)?'':','.$data).' FROM characters c LEFT JOIN accounts a ON (c.account_name=a.login) WHERE a.owner='.intval($member_id)); # w tej linii jest błąd
		$L2DB->execute();

		$returnList = array();

		while($row = $L2DB->fetch())
		{
			$returnList[ $row['owner'] ] = $row;
		}

		return $returnList;
	}
}
?>

Edytowane przez pziemczyk
Opublikowano

Skorzystałem z dokumentacji i zastosowałem

	static public function getMemberCharacters( $member_id )
	{
		self::sql_connect();

		$L2DB->build(	'select'	=> 'c.*',
						'from'		=> array( 'characters' => 'c' ),
						'add_join'	=> array(
							array(
								'select'	=> 'a.login',
								'from'		=> array( 'accounts' => 'a' ),
								'type'		=> 'right',
								'where'		=> 'c.account_name=a.login'
							)
						)
					);

		$L2DB->execute();

		$returnList = array();

		while($row = $L2DB->fetch())
		{
			$returnList[ $row['char_uid'] ] = $row;
		}

		return $returnList;
	}

I niestety ale wywala błąd

Parse error: syntax error, unexpected T_DOUBLE_ARROW in /var/www/board/fakemmo/applications_addon/other/game/sources/classes/gamelib.php on line 52

Niby powinno być okej. Chyba że popełniłem jakąś gafę :P

Opublikowano

Dokładnie to ta linia

$L2DB->build(   'select'        => 'c.*',

W sumie zdziwiłem się ;o

  • Manager
Opublikowano

                static public function getMemberCharacters( $member_id )
               {
                       self::sql_connect();

                       $L2DB->build(  array( 'select'        => 'c.*',
                                                       'from'          => array( 'characters' => 'c' ),
                                                       'add_join'      => array(
                                                               array(
                                                                       'select'        => 'a.login',
                                                                       'from'          => array( 'accounts' => 'a' ),
                                                                       'type'          => 'right',
                                                                       'where'         => 'c.account_name=a.login'
                                                               )
                                                       )
                                               ));

                       $L2DB->execute();

                       $returnList = array();

                       while($row = $L2DB->fetch())
                       {
                               $returnList[ $row['char_uid'] ] = $row;
                       }

                       return $returnList;
               }

Polecałem zajrzeć w kod, ale Ty uparcie nie robisz tego. :P

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

Faktycznie, teraz już widzę różnicę. Natomiast teraz wróciliśmy do punktu wyjścia, ten sam błąd co wcześniej

Fatal error: Call to a member function build() on a non-object in /var/www/board/fakemmo/applications_addon/other/game/sources/classes/gamelib.php on line 52

A przecież korzystałem z dokumentacji, o tutaj - http://community.invisionpower.com/resources/documentation/index.html/_/developer-resources/api-methods/classdb-r340

Opublikowano (edytowane)

No to mam przecież zdefiniowane. Tylko nie może być to jako public function bo wywala

Strict Standards: Non-static method GameLib::sql_connect() should not be called statically in /var/www/board/fakemmo/applications_addon/other/game/sources/classes/gamelib.php on line 59

<?php

class GameLib
{
       public function sql_connect($app)
       {
		if (!file_exists(IPS_KERNEL_PATH . 'classDb' . ucwords($app['db_driver']) . '.php'))
		{
			return 'Invalid driver';
		}

		require_once( IPS_KERNEL_PATH . 'classDb' . ucwords($app['db_driver']) . '.php' );

		$classname = "db_driver_".$app['db_driver'];

		$DB = new $classname;

		$DB->obj['sql_database']   = $app['db_db'];
		$DB->obj['sql_user']       = $app['db_user'];
		$DB->obj['sql_pass']       = $app['db_pass'];
		$DB->obj['sql_host']       = $app['db_host'];
		$DB->obj['sql_charset']    = $app['db_charset'];

		define( 'SQL_DRIVER'              , $app['db_driver'] );
		define( 'IPS_MAIN_DB_CLASS_LOADED', TRUE );

		/* Required vars? */
		if ( is_array( $DB->connect_vars ) and count( $DB->connect_vars ) )
		{
			foreach( $DB->connect_vars as $k => $v )
			{
				$DB->connect_vars[ $k ] = ( isset( $app[ $k ] ) ) ? $app[ $k ] : ipsRegistry::$settings[ $k ];
			}
		}

		$DB->return_die = true;

		if ( ! $DB->connect() )
		{
			return $DB->error;
		}
		else
		{
			return true;
		}
       }

	static public function getMemberCharacters( $member_id )
	{
		$loadConnection = array(
			'db_db'                 => 'l2jdb', # Nazwa bazy danych
			'db_user'               => '*******', # Nazwa usera
			'db_pass'               => '******', # Haslo
			'db_host'               => 'localhost', # Host bazy
			'db_charset'            => '', # Pozostaw w sumie puste
			'db_driver'             => 'mysql',
		);

		self::sql_connect( $loadConnection );

		$DB->build(  array( 'select'        => 'c.*',
							  'from'          => array( 'characters' => 'c' ),
                                 'add_join'      => array(
					   		  		array(
										'select'        => 'a.login',
										'from'          => array( 'accounts' => 'a' ),
										'type'          => 'right',
										'where'         => 'c.account_name=a.login'
									)
							  )
					));

		$DB->execute();

		$returnList = array();

		while($row = $DB->fetch())
		{
			$returnList[ $row['char_uid'] ] = $row;
		}

		return $returnList;
	}


}
?>

Edytowane przez pziemczyk

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.