DB abfrage aus einer function heraus
Patrick
- php
Hallo
Ich include auf meiner Seite einmal eine Datei mit functionen und die entsprechende Seite die der User sehen möchte. da ich die DB abfrage oft verwende habe ich sie in die functions.inc.php (diese Datei wird included) in eine function geschrieben. in der Datei zB main.php (wird auch included) brauche ich eine DB abfrage und schreibe dann "db_abfrage($tabelle);" aber leider kann ich nur innerhalb dieser function auf die Daten zugreifen. was kann ich tun damit ich auf der ganzen Seite Zugriff auf diese Daten habe?
Mit freundlichen Grüssen,
Patrick
hi,
in der Datei zB main.php (wird auch included) brauche ich eine DB abfrage und schreibe dann "db_abfrage($tabelle);" aber leider kann ich nur innerhalb dieser function auf die Daten zugreifen. was kann ich tun damit ich auf der ganzen Seite Zugriff auf diese Daten habe?
schlechte möglichkeit: die variablen global machen (unsauberer stil).
bessere, und ggf. auch einfachere möglichkeit: den rückgabewert der funktion nutzen, um die ressource-id zurückzugeben.
$ergebnis1 = db_abfrage($tabelle);
ob es dann allerdings noch sinnvoll ist, diese abfrage in einer funktion zu kapseln, ist eine andere frage - denn diese funktion kann dann ja ausser der ressource-id nichts anderes mehr zurückgeben. einen unterschied zum direkten aufruf der jeweiligen sql-query-funktion von php gibt es dann eigentlich nur noch, wenn du db_abfrage als wrapper-funktion für den allgemeinen zugriff auf verschiedene datenbank-systeme einsetzen willst.
gruss,
wahsaga
Hallo
das sieht so aus bei mir:
functionen.inc.php:
<?php
function select_data($tabelle)
{
// Verbindung zur Datenbank aufbauen
$ergebnis = mysql_query("SELECT * FROM ".$tabelle." WHERE model_id = '".substr($_GET['userID'],1)."'");
$sd_data = mysql_fetch_array($ergebnis);
}
index.php:
<?php
include("includes/includes.inc.php");
include("includes/db.inc.php");
include("includes/texte.inc.php");
include("includes/functionen.inc.php");
...
<tr>
<td valign="top" width="156"><?=navbar_links()?></td>
<td valign="top" width="588"><?=side_includes()?></td>
<td valign="top" width="156"><?=navbar_rechts()?></td>
</tr>
...
sedcard.php (wird per function side_includes() included):
<?php
select_data($tabelle['models']); // $tabelle('models'] kommt aus der includes.inc.php aber wird leider nicht erfasst. warum?
...
<tr>
<td width="155"><span class="sd1">Name:</span></td>
<td><span class="sd2"><?=$sd_data['name']?></span></td>
</tr>
...
leider habe ich jetzt nur innerhalb der function aus der functionen.inc.php zugriff auf die felder des aufgerufenen datenzatzes. wie kann ich es machen das ich auf der ganzen seite zugriff auf die felder habe?
Mit freundlichen Grüssen,
Patrick
hi,
function select_data($tabelle)
{
// Verbindung zur Datenbank aufbauen
$ergebnis = mysql_query("SELECT * FROM ".$tabelle." WHERE model_id = '".substr($_GET['userID'],1)."'");
hier setzt du direkt eine query an die DB ab. was hat das mit "verbindung aufbauen zu tun? die verbindung musst du schon vor dem absetzen einer query aufgebaut haben.
$sd_data = mysql_fetch_array($ergebnis);
}
hier legst du dir den ersten(!) datensatz des abfrage-ergbnisses in einer variablen ab. danach ist aber die funktion zu ende, ohne dass du die variable überhaupt noch weiter verwendest. das ist zwecklos, was soll das?
<?php
select_data($tabelle['models']); // $tabelle('models'] kommt aus der includes.inc.php aber wird leider nicht erfasst. warum?
hier rufst du deine obige funktion auf, die die abfrage macht (unter der annahme, dass die verbindung schon woanders aufgebaut wurde).
wie oben schon gesagt, diese funktion führt die abfrage aus - und wirft das ergebnis anschliessend weg. sinn ...?
du solltest dich erst einmal grundlegend mit dem konzept der funktionen beschäftigen, da du dort anscheinend noch erhebliche wissensmängel hast.
http://www.php.net/manual/de/functions.php
insbesondere den abschnitt über rückgabewerte solltest du dir ansehen.
und zum thema geltungsbereiche von variablen solltest du dein wissen auch noch etwas aufbessern: http://www.php.net/manual/de/language.variables.scope.php
gruss,
wahsaga
Hallo
danke für die antwort!
wie kann ich denn die DB Abfrage in einer anderen Datei ablegen und wenn ich sie brauche aufrufen?
Mit freundlichen Grüssen,
Patrick
Hallo
aber es muss doch eine möglichkeit geben die daten die im array gespeichert werden auch außerhalb der function verfügbar zu machen oder?
Mit freundlichen Grüssen,
Patrick
hi,
aber es muss doch eine möglichkeit geben die daten die im array gespeichert werden auch außerhalb der function verfügbar zu machen oder?
ich hatte dir bereits gesagt, dass du dich mit dem konzept des _rückgabewertes einer funktion_ vertraut machen sollst.
gruss,
wahsaga