Problem mit mysql Klasse
David Thalmann
- php
0 David Thalmann0 lulu0 dedlfix0 fanelf.de
Hallo, Guten Tag... und schönen Abend!
Ich hab mich nach langem Kampf mit mir selber ( :D ) endlich dazu entschieden, mit Klassen zu arbeiten, da ich auf einer Homepage (war glaub phpforum.de) eine super Erklärung gefunden habe.
Doch schon mein erster Versuch scheiterte... hier einmal die Klasse:
(classes/db.class.php)
<?php
class db
{
var $host="localhost"; #host, meisstens localhost
var $user=""; #username für datenbank
var $password=""; #passwort für datenbank
var $dbname="newcouch"; #datenbankname
var $connid; #connection id
var $result; #array/string zum testen ob abfrage vorhanden ist und zum ausgeben
/*
db_connect
stellt verbindung zur datenbank her
*/
function db_connect()
{
$this->connid = mysql_connect($this->host, $this->user, $this->password);
mysql_select_db($this->dbname, $this->connid) or die(mysql_error());
}
####Funtkioniert bis hier....
/*
sql_select
verschiedene möglichkeiten zur abfrage
*/
function sql_select($table, $field="*", $order="", $dir="", $from="", $to="")
{
if(empty($field)) $field = "*"; # wenn nichts angegeben alle wäheln
if(!empty($order)) $order = " ORDER BY ".$order."
"; # order by...
if(!empty($dir)) $dir = " ".$dir; # gewünschte "richtung" (DESC / ASc)
if(empty($from) && empty($to)) $limit = ""; # wenn keine begrenzung
elseif(empty($from) && !empty($to)) $limit = " LIMIT 0, ".$to; # wenn nur nach oben begrenzt
else $limit = " LIMIT ".$from.", ".$to; # wenn oben und unten begrenzung
$abfrage = ""SELECT ".$field."
FROM ".$table."
".$order."".$dir."".$limit."""; # abfrage string
echo "$table <br>$field <br>$from <br>$to <br>$order <br>$dir <br />$this->connid <br /><br />$abfrage<br />";
if(!$this->result = mysql_query($abfrage, $this->connid)) return "Fehler beim Senden der Abfrage..."; # error
else return $this->result; # gibt das resultat zurück
}
}
?>
Dann die index.php:
<?PHP
include("classes/db.class.php");
$db = new db;
$db->db_connect();
$db->db_select();
$cont = $db->sql_select("testentry","text");
echo $cont;
$cont = mysql_fetch_array($cont);
echo $cont[0];
?>
Dass gibt das ganze aus:
testentry
text
DESC
Resource id #5
"SELECT text
FROM testentry
DESC"
Fehler beim Senden der Abfrage...
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\*******************\index.php on line 19
Ich hoffe das mir jemand helfen kann!
Herzliche Grüsse aus der Schweiz
David
Nachtrag:
Dann die index.php:
<?PHP
include("classes/db.class.php");$db = new db;
$db->db_connect();
Dies hier natürlich nicht! (gelöscht)
$db->db_select();
$cont = $db->sql_select("testentry","text");
ist doch richtig so oder?
echo $cont;
gibt vordefinierte fehlermeldung aus ("Fehler beim Senden der Abfrage")
$cont = mysql_fetch_array($cont);
gibt fehler aus, dass es kein brauchbares resultat ist
echo $cont[0];
?>
Huhu David
"SELECT
text
FROMtestentry
DESC"
Fehler beim Senden der Abfrage...
Da steht es doch ;-)
Viele Grüße
lulu
echo $begrüßung;
var $host="localhost"; #host, meisstens localhost
var $user=""; #username für datenbank
var $password=""; #passwort für datenbank
var $dbname="newcouch"; #datenbankname
Solche veränderlichen Werte zu setzen ist eigentlich Aufgabe des Konstruktors, den man mit entsprechenden Parametern versorgt. Sonst ist deine Klasse zu wenig universell.
if(!empty($order)) $order = " ORDER BY
".$order."
"; # order by...
if(!empty($dir)) $dir = " ".$dir; # gewünschte "richtung" (DESC / ASc)
Wenn $order nicht angegeben wird, darf auch kein $dir berücksichtigt werden.
$abfrage = ""SELECT
".$field."
FROM".$table."
".$order."".$dir."".$limit."""; # abfrage string
Das sieht recht umständlich aus. Wenn schon einen ""-String nimmst, dann musst du nicht wegen der Variablen aus dem String rausgehen. Wenn du unbedingt rausgehen willst (aus welchen praktisch irrelevanten Gründen auch immer), dann kannst du '' nehmen und sparst dir beim " das . Leere Zeichenfolgen zu verketten ist sinnlos. Statt $order."".$dir kannst du $order.$dir schreiben.
if(!$this->result = mysql_query($abfrage, $this->connid)) return "Fehler beim Senden der Abfrage..."; # error
else return $this->result; # gibt das resultat zurück
Testest du auch das Rückgabeergebnis, ob ein (nichtssagender) String ist, weil ein MySQL-Fehler aufgetreten ist (nur welcher?) oder eine Ressource ist?
echo "$verabschiedung $name";
eine 'DB' klasse, welche nur weiterreicht, ohne eine veredelungsfunktion zu erfüllen, ist überflüssig.
besser ist eine db-klasse, welche vom konkreteten db-system unabhängig macht, so dass eine anwendung leicht auf eine andewre db umgestellt werden könnte, ohne an tausend stellen anpassungen machen zu müssen.
auf
<a href="http://fanelf.de/Dokumentation/Persistenz.htm"> http://fanelf.de/Dokumentation/Persistenz.htm </a>
gibts ein muster, welches als orientierung dienen kann.