[PHP + PEAR] In eigenen Funktionen auf PEAR zugreifgen

chrisbergr

Erfahrenes Mitglied
Hallo Forum,

ich habe da, wie es der Titel schon verrät, ein kleines Problem mit PHP im Zusammenspiel mit PEAR. Bewusst bitte ich hier um Hilfe und nicht im offiziellen PEAR-Forum, da es mir in deutsch leicher fällt und hier ja einige kompetente Leute rumschwirren.

Aber genug davon. In einer Klasse habe ich eine Funktion, in der ich mittels der PEAR DB Klasse eine DB Abfrage machen möchte. Funktioniert nicht, mir wird der folgende PHP-Error angezeigt. Wenn ich das ganze nicht in dieser Klasse aufrufe, funktioniert alles reibungsloß.

Code:
Fatal error: Call to undefined method DB::query() in [...]\objects.inc.php on line 113

Normalerweise kann ich mit diesem Fehler ja etwas anfangen, aber in dem Fall verstehe ich es nicht.
Ich poste hier einmal den Ansatz, der funktioniert:
PHP:
	require_once 'DB.php';
	include_once ("../inc/config.inc.php");
	
	if (!defined('DSN')) {
		define(DSN,$db_type.'://'.$db_user.':'.$db_passwd.'@'.$db_host.'/'.$db_name);
	}
	$dboptions = array(
		'debug'       => 2,
		'portability' => DB_PORTABILITY_ALL,
		'ssl' => true,
	);
	$db =& DB::connect(DSN, $dboptions);
	if (PEAR::isError($db)) {
		die($db->getMessage());
	}
	$db->setFetchMode(DB_FETCHMODE_ASSOC);
		
	$check_sql = 'SELECT id'
			 . ' FROM '.db_Var.'user'
			 . ' WHERE usr = ?'
			 . ' LIMIT 0,1';
	$check_data = array($username);
	$check_res =& $db->query($check_sql, $check_data);
	while ($check_res->fetchInto($row)) {
		[...]
	}

Wie gesagt, funktioniert super. Im nächsten Beispiel klappt es allerdings nicht mehr, da erhalte ich dann oben genannten Fehler.

index.php:
PHP:
require_once 'DB.php';
include_once ("inc/config.inc.php");

$db		= new DB();
if (!defined('DSN')) {
    define(DSN,$db_type.'://'.$db_user.':'.$db_passwd.'@'.$db_host.'/'.$db_name);
}
$dboptions = array(
    'debug'       => 2,
    'portability' => DB_PORTABILITY_ALL,
    'ssl' => true,
);

$db =& DB::connect(DSN, $dboptions);
if (PEAR::isError($db)) {
    die($db->getMessage());
}
$db->setFetchMode(DB_FETCHMODE_ASSOC);

include ("inc/objects.inc.php");
$User		= new User();

echo $User->Privacy($what,$from,$logintmp,$who,$rank);

objects.inc.php:
PHP:
	class User {
		function Privacy($what,$from,$logintmp,$who,$rank)  {
			//[...]
				$sqlf1 = 'SELECT ?'
					 . ' FROM '.db_Var.'user_options'
					 . ' WHERE id = ?'
					 . ' LIMIT 0,1';
				$dataf1 = array($what,$from);
				$resuf1 =& DB::query($sqlf1, $dataf1);  // HIER IST DER FEHLER (mit $db->query() habe ich es auch schon versucht)
				if (DB::isError($resuf1)) {
					//[...]
				} else {
					while ($resuf1->fetchInto($row)) {
						//[...]
					}
				}
			}
			return $authorisation;
		}
	}

So, zum einen hoffe ich, ihr werdet aus dem geschriebenen schlau, und zum anderen doch sehr, dass mir jemand mein Problem zum besseren Verständniss erklären kann und Lößungsansätze mitteilen.

Vielen Dank im Vorraus.

//Christian
 
Zuletzt bearbeitet:
Sind mit den Dateien, die du einbindest (config.inc.php und db.php) jedesmal die gleichen Dateien gemeint? Wenn ja dann vergleiche mal die includes
PHP:
 require_once 'DB.php'; include_once ("../inc/config.inc.php");
PHP:
 require_once 'DB.php'; include_once ("inc/config.inc.php");
Wenn es sich um die gleichen Dateien handelt, wird in einem der beispiele entweder die config.inc.php Datei nicht eingebunden, da sie sich in einem anderen Verzeichniss befindet oder was ich eher denke die Datei DB.php Eine nicht eingebundene Klasse kann auch nicht verwendet werden...
 
Danke, sehr aufmerksam .. Allerdings liegt es leider nicht daran.. Die erste Datei ist nur in einem Unterordner ... Verknüpfungen und all die plausieblen Dinge habe ich schon gecheckt, das passt alles.

Die DB.php liegt wo ganz anders auf dem Webserver, im PEAR - Ordner. Keine Ahnung wie, aber der include funktioniert dennoch. (Sonst würden ja auch schon bei vorherigen Funktionen, die genutzt werden, Fehler ausgespuckt werden.
 
Zuletzt bearbeitet:
Zurück