[PHP/MySQL]Połączenie z MySQL wychodzi poza klase


(system) #1

Witam!

Mam następujący problem moja klasa {jesli mozna to tak nazwac} do obslugi mysql powoduje błąd który objawia się przejściem połączenia mysql poza obręb instancji klasy.

Kod ładowania klasy:

$c1=new db;

$c1->connect($host,$user,$pass,$base);

$c2=new db;

$c2->connect($h2,$u2,$p2,$b2);

Teraz gdy zadam Querende do klasy $c1->query('zapytanie'); zapytanie jest kierowane do połączenia z klasy $c2; Kod klasy:

<?php

	class db	{

		//Łączenie z bazą danych

		function connect($host,$user,$pass,$base)	{

			$this->dbs=mysql_connect($host,$user,$pass);

			$this->dbb=mysql_select_db($base,$this->dbs);

			if (!$this->dbs)	{	echo 'Błąd podczas łączenia z serwerem!';	}

			elseif (!$this->dbb)	{	echo 'Błąd podczas łączenia z baza!';	}

			else	{	echo 'ALL OK!';	}

		}

		function query($query)	{

			echo $query;

			$return=mysql_query($query,$this->dbs);

			if (!$return)	{	return "QUERY ERROR!".mysql_error();	}

			else	{	return $return;	}

		}

		function assoc($query)	{

			echo $query;

			return mysql_fetch_assoc($query);

		}

	}

?>

Próbowałem już chyba wszystkiego... Nawet Google milczy:(

Próbowałem użyć Adodb jednak zapytania wogole nie były wykonywane:(

Pozdrawiam

----EDIT

Poprawiłem zgodnie z zaleceniami


(Airborn) #2

echh, mogę się przyczepić do dwóch rzeczy?

  1. logicznie rzecz biorąc połączenie powinno być wykonywane od razu przez konstruktor obiektu

  2. obsługa ewentualnych błędów w sposób jaki Ty próbujesz to robić (użycie wytłumienia @) jest raczej niedopuszczalna, a już na pewno nie elegancka

odnośnie samego problemu

nie wiem co zawierają u Ciebie zmienne dla poszczególnych połączeń, ale jeżeli są takie same to tutaj leży problem, ogólnie zmień mysql_pconnect na mysql_connect i sprawdź jak wtedy się będzie zachowywać skrypt


(system) #3

Niestety błąd istnieje w dalszym ciągu:(

Może będzie pomocne to iż parser to php5, mysql5, apache2 i host to debian lenny.


(Airborn) #4

zaraz, zaraz, zaraz...

$c1=new db;

class mysql {

?


(system) #5

sorki błąd podczas przepisywania :oops:

oczywiście jest class db

zasobnik mi coś nie działa i nie trybi copy paste:D


(Airborn) #6

pytanie czy koniecznie potrzebujesz stałych połączeń pconnect, bo większość aplikacji raczej ich nie potrzebuje, a zastosowanie zwykłych połączeń connect mogło by uprościć sprawę


(system) #7

Zgodnie z zaleceniami zmieniłem pconnect na connect jednak błąd dalej występuje:(

PS. 1 post został zaktualizowany


(Airborn) #8

to teraz spróbuj zmienić

$this->dbs=mysql_connect($host,$user,$pass);

na

$this->dbs=mysql_connect($host,$user,$pass, TRUE);

(system) #9

maleńki jesteś wielki:D

No cóż właśnie potwierdziły się moje obawy:( Jestem pupa z PHP:(


(Airborn) #10

zasadniczo, jeśli mowa o php5 to w ogóle Twój kod prezentuje się kiepsko (sorry)

zobacz taką modyfikację na szybko:

<?php

class db

{


	public function __construct( $host, $user, $pass, $base )

	{

		$this->link = mysql_connect($host, $user, $pass, TRUE) or die('Błąd połączenia'.mysql_error()));

		mysql_select_db($base, $this->link) or die('Błąd wyboru bazy'.mysql_error()));

		$this->base = $base;

	}

	public function query( $query )

	{

		$result = mysql_query($query,$this->link) or die('Błąd zapytania',mysql_error());

		return $result;

	}

	function assoc($result)

	{

		return mysql_fetch_assoc($result);

	}

}

?>

chociaż i takie rozwiązanie jest nie eleganckie bo zamiast or die() najlepiej było by zastosować wyjątki. Ale możesz wyciągnąć może kilka wniosków EDIT: a potem

$a = new db($host, $user, $pass, $base );

$b = new db($host, $user, $pass, $base );

$a->query();

(system) #11

Thx:D

Wielkie dzięki:)

Wolę krytyke w twarz niz ocenianie za moimi plecami więc jestem Ci wdzięczny:)

Zwróciłem uwagę iż teraz kod chodzi znacznie szybciej.

Jeszcze raz wielkie thx.