PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP SQL Abfrage in Funktion auslagern


Matrix316
2008-08-28, 21:19:37
Ich möchte gerne eine Funktion in eine PHP Datei auslagern, die so aussieht:
SQL String ist z.B. select * from tabelle . Kann eine Zeile als ergebnis, oder auch mehrere sein.

function DB_ACCESS_SELECT($SQLString)
{
$MYSQL_HOST = "localhost";
$MYSQL_USER = "root";
$MYSQL_PASS = "4712";
$db_link = mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS);
if($db_link)
{
mysql_select_db("mybase1", $db_link)
or die ("Fehler beim Zugriff auf die Datenbank $database!");
$result = mysql_query($SQLString);
$data = mysql_fetch_array($result);
return $data;
}
}


Das ganze ist in einer PHP Datei, die ich mit Include einbinde.

Ich habs auch schon mit fetch_row und einer while schleife und alles mögliche probiert, aber in Data ist irgendwie nix.

Mach ich das ganze in der Datei wo ichs brauche, funktionierts. Lagere ich die Funktion aus, gehts net. Woran liegts?

Berni
2008-08-28, 23:09:57
Wird der Code denn überhaupt ausgeführt (am Besten mal mit ein paar echos nachsehen)?
Mach außerdem mal ein error_reporting(E_ALL); davor so dass man evtl. Fehlermeldungen sieht.

Abgesehen davon ist das was du machst ganz schlecht: Bei jeder Datenbankabfrage würde eine neue Verbindung aufgebaut und das ist relativ kostspielig. Normal macht man eine am Anfang und gut ists...

Matrix316
2008-08-28, 23:31:47
Nehmen wir mal an, ich hab oben auf einer php Seite eine SQL Abfrage, dann HTML Code und unten wieder einen PHP Bereich. Kann ich da dann die Daten von der obigen Abfrage weiter nutzen?

Also quasi so

<?php
Abfrage,
$Daten1 = ...
$Daten2 = ...
?>

<html>
<body>
blablabla
<?php
echo("blablabla".$Daten1."blablabla");
?>
<table>
<tr>
<td>
etc etc etc
</body>
</html>

Gast
2008-08-28, 23:57:08
http://de.php.net/manual/de/language.basic-syntax.php

kurz: Ja.

mapel110
2008-08-28, 23:59:12
Ja, das geht.

Den Fehler im ersten Posting sehe ich auch nicht. Sollte eigentlich klappen, wie es da steht. Sofern er eben die Verbindung aufbauen kann.

The_Invisible
2008-08-29, 07:40:41
ich würde dann mal ein bisschen debuggen.

zb direkt in der function vor "return ..." ein print_r($data) einbauen und nach dem funktionsaufruf das selbe.

mfg

Matrix316
2008-08-29, 12:17:06
Könnte ich auch den code

$MYSQL_HOST = "localhost";
$MYSQL_USER = "root";
$MYSQL_PASS = "4712";

in eine andere php Datei schreiben und die dann mit include einbinden? Oder werden die Variablen nicht mit übergeben?

EDIT Laut PHP Manual müsste ich auf die Variablen zugreifen können, wenn ich diese mit Include einbinde - wenn sie in einem PHP Tag stehen. Aber irgendwie hat das auch nicht so wirklich funktioniert.

darph
2008-08-29, 12:30:42
Mit mysql_fetch_array() bekommst du übrigens immer nur eine (die nächste) Zeile aus deinem resultset zurückgegeben.

Deine Funktion funktioniert nur für Queries, deren Ergebnis garantiert nur eine Zeile beinhaltet.



EDIT Laut PHP Manual müsste ich auf die Variablen zugreifen können, wenn ich diese mit Include einbinde - wenn sie in einem PHP Tag stehen. Aber irgendwie hat das auch nicht so wirklich funktioniert.
Das liegt am Bereich, in dem diese gültig sind.


<?php
// var.php
$x = 5;
?>



<?php
include("var.php");

function blafasel() {
echo($x);
}
?>

Das funktioniert nicht, da $x hier außerhalb der Funktion definiert wurde. Was du brauchst, sind globale (schlecht), bzw. lokale Variablen. Das ist aber in deinem konkreten Fall unnötig. Wenn die Verbindung einmal aufgebaut wurde, kann dein PHP-Script diese immer nutzen.

Das siehst du daran, daß du bei der Funktion mysql_query eben keinen Verweis auf deine Datenbankverbindung angeben mußt. PHP nimmt dann immer die zuletzt geöffnete Verbindung.

Du kannst also zum Beispiel deinen Verbindungsaufbau komplett auslagern und inkludierst dann nur noch beispielsweise eine connect.php. Das ist auch dahingehend sinnvoll, daß du dann nicht mit jedem Funktionsaufruf eine neue Verbindung aufbaust, die dann erst mit Beendigung des Scripts geschlossen wird. So kann es dir schnell passieren, daß die DB dir den Finger zeigt und sagt "too many connections", je nachdem, wie viele Aufrufe du hast und wie stark die Seite besucht wird.

Im Übrigen ist $database nicht gesetzt.

Matrix316
2008-08-29, 13:12:38
Was ist $Database?

Das heißt ich mach ein Include wo ich verbinde...

<?php
$MYSQL_HOST = "localhost";
$MYSQL_USER = "root";
$MYSQL_PASS = "4712";
$db_link = mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS);
if($db_link)
{
mysql_select_db("mybase1", $db_link)
or die ("Fehler beim Zugriff auf die Datenbank $database!");
}?>


und da wo ich es includiert habe, kann ich mit

<?php
$result = mysql_query($SQLString);
$data = mysql_fetch_array($result);
?>


drauf zugreifen? Jo, stimmt, wenn die Includes verfügbar sind, müsste es gehen.

Und wie bekomme ich am besten alles was ich abfrage zurück? Mit (in der Funktion)


$count = 0;
while($row = mysql_fetch_row($result))
{
$data[$count] = $row;
$count = $count + 1;
}
...
return $data;


habe ich es schon versucht, aber das hat irgendwie nicht funktioniert. Oder lags daran, dass ich es im Include File versucht hatte? Hmmm...

darph
2008-08-29, 13:38:16
Schau doch mal ob deine Abfrage überhaupt funktioniert. Also ohne PHP, mit einem SQL-Client.

Und nutz doch die [php]-Tags hier. Dafür sind sie da. Syntaxhighlighting ftw! (y)

matrix316@work
2008-08-29, 16:55:36
Die SQL Abfragen funktionieren, da wenn ich den Zugriff nicht auslagere, die Abfrage funktioniert. Ist eigentlich nicht mehr als select * from tabelle where Spalte = 'Text';

Matrix316
2008-08-29, 21:51:38
Ich glaub ich hab den Fehler gefunden, bei der SQL Abfrage war die Variable die ich mit $_GET hole klein geschrieben, obwohl sie mit einem großen Buchstaben anfängt. :ugly:

Gast
2008-09-02, 01:45:21
:D mal wieder ein typischer Fehler.
bessere Entwicklungsumgebung verwenden :up:

Matrix316
2008-09-04, 01:36:24
Gibts sowas für PHP überhaupt? Ich meine "gute" Entwicklungsumgebungen? ;)