Verständnisfrage includierte Klasse
Hilfsschüler
- php
tag,
kurz und schmerzlos, warum funktioniert das hier einwandfrei:
<?php
include(ROOT_PATH.'config.php');
include(ROOT_PATH.'includes/db_mysql.php');
include(ROOT_PATH.'includes/constants.php');
$site_db = new Db($db_host, $db_user, $db_password, $db_name);
$sql = "SELECT COUNT(*) as total_images
FROM ".IMAGES_TABLE." a, ".CATEGORIES_TABLE." b
WHERE a.image_active=1
AND a.cat_id = b.cat_id
AND b.auth_viewcat=".AUTH_ALL."
AND b.auth_viewimage=".AUTH_ALL."
";
$row = $site_db->query_firstrow($sql);
[restcodegelöscht]
?>
$row wird wie erwartet mit Daten gefüllt und steht zur weiteren Verarbeitung zur Verfügung, während
<?php
include(ROOT_PATH.'config.php');
include(ROOT_PATH.'includes/db_mysql.php');
include(ROOT_PATH.'includes/constants.php');
$site_db = new Db($db_host, $db_user, $db_password, $db_name);
$sql = "SELECT COUNT(*) as total_images
FROM ".IMAGES_TABLE." a, ".CATEGORIES_TABLE." b
WHERE a.image_active=1
AND a.cat_id = b.cat_id
AND b.auth_viewcat=".AUTH_ALL."
AND b.auth_viewimage=".AUTH_ALL."
";
function abfrage($sql) {
$row = $site_db->query_firstrow($sql);
return $row;
}
print_r(abfrage($sql));
[restcodegelöscht]
?>
$row wird nicht mit Daten gefüllt, da das Script mit einem Fatal Error abgebrochen wird, mit dem ich jedoch gar nichts anfangen kann.
Kann mir das bitte jemand möglichst verständlich erklären, warum das so ist? Danke sehr.
LG
Hi!
function abfrage($sql) {
$row = $site_db->query_firstrow($sql);
return $row;
}
$site_db steht innerhalb der Funktion nicht zur Verfügung. Das hätte dir eine Notice-Meldung gesagt, wenn du das error_reporting auf E_ALL stehen gehabt hättest. Die schlechteste Variante, sie bekannt zu machen ist, globals $site_db; zu notieren. Besser ist es, sie der Funktion als weiteren Parameter zu übergeben. Und da du schon mit Objekten hantierst, wäre es noch besser, wenn die Funktion eine Methode einer Klasse würde. Die hat dann auch Zugriff auf weitere Eigenschaften, von denen eine das erzeugte Datenbankobjekt sein könnte.
$row wird nicht mit Daten gefüllt, da das Script mit einem Fatal Error abgebrochen wird, mit dem ich jedoch gar nichts anfangen kann.
Sag nur niemandem den genauen Wortlaut, dann können nämlich andere mit der Aussage auch nur recht wenig anfangen :-)
Lo!
Hi,
schande über mich. :)
Sag nur niemandem den genauen Wortlaut, dann können nämlich andere mit der Aussage auch nur recht wenig anfangen :-)
Fatal error: Call to a member function query_firstrow() on a non-object in /srv/www/vhosts/xxx/httpdocs/cms/typo3conf/ext/page_php_content/pi1/class.tx_pagephpcontent_pi1.php(55) : eval()'d code on line 40
Hi,
Da hast du deine Antwort doch:
Call to a member function query_firstrow() on a non-object
Aufruf einer methode durch ein "nicht objekt"
So wie die anderen schon gesagt haben. Innerhalb der Funktion ist dein Object nicht bekannt.
Hallo,
<?php
include(ROOT_PATH.'config.php');
include(ROOT_PATH.'includes/db_mysql.php');
include(ROOT_PATH.'includes/constants.php');$site_db = new Db($db_host, $db_user, $db_password, $db_name);
...function abfrage($sql) {
$row = $site_db->query_firstrow($sql);
return $row;
}
Vorsicht: Globale Variablen sind in PHP nicht, wie in einigen anderen Sprachen, innerhalb von Funktionen verfügbar! Entweder musst du $site\_db in der Funktion als global bekanntgeben (nicht empfehlenswert), oder als zusätzlichen Parameter an die Funktion übergeben (viel besser).
> $row wird nicht mit Daten gefüllt, da das Script mit einem Fatal Error abgebrochen wird, ...
... den du hier auch bitte hättest zitieren dürfen, das erspart den Helfenden einiges Rätselraten. Fehlermeldungen sind dazu da, Informationen über einen Fehler zu vermitteln.
Ciao,
Martin
--
Alkohl ist ungesund,
Rauchen ist schädlich,
Sex ist unanständig
- und die Erde ist eine flache Scheibe.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Hi Martin,
... oder als zusätzlichen Parameter an die Funktion übergeben (viel besser).
Danke für die Horizonterweiterung :) Das hat geklappt :)
LG
Hallo,
function abfrage($sql) {
$row = $site_db->query_firstrow($sql);
return $row;
}
Wo kommt $site_db her? Nein, sie enthält nicht das was du erwartest ...
$row wird nicht mit Daten gefüllt, da das Script mit einem Fatal Error abgebrochen wird, mit dem ich jedoch gar nichts anfangen kann.
Und deswegen verheimlichst du uns die genaue Fehlermeldung auch gleich mal?
Gruß,
Tobias
Hi,
Wo kommt $site_db her? Nein, sie enthält nicht das was du erwartest ...
Und deswegen verheimlichst du uns die genaue Fehlermeldung auch gleich mal?
willkommen im Club! Du bist nun der dritte, der mit je einer Minute Abstand dieselben Hinweise gibt. Dann muss ja wohl was dran sein. :-)
Ciao,
Martin