Fehler mit klassen und mysql
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfragen
befehl
database
date
daten
ergebnis
error
fallen
fehler
gen
global error
insert
klasse
parameter
resource
result
tabelle
test
username
vielen dank
-
Hi,
ich habe zu ?bungszwecken folgendes kleines programm gechrieben:
g.class.php:
<?php
class g
{
var $verbindung;
var $sqlbefehl;
var $ergebnis;
var $g;
function g_ausgabe($username, $user, $host, $pw, $databse,$table)
{
$this->verbindung = mysql_connect("$host", "$user" , "$pw")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
$this->sqlbefehl="SELECT g FROM $table where username = '$username'";
$this->ergebnis=mysql_db_query("$database", $this->sqlbefehl, $this->verbindung);
list($this->g)=mysql_fetch_array($this->ergebnis);
return $this->g;
}
}
?>
g.php:
<?php
$username="test";
include ("g.class.php");
$g = new g;
$g->g_Ausgabe("$username","root", "localhost","" , "test","login");
echo"$g=$g->g";
?>
Nun tritt da beim Ausf?hren aber folgender Fehler auf:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\server\xampp\htdocs\bg\class\g.class.php on line 16
W?re echt nett,wenn mir jemand da helfen k?nnte.
Vielen Dank schon mal im vorraus!
MfG Dagar
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also deine Klasse ist ja ganz sch?n, aber nicht wirklich effektiv!
Da ich gerade selber eine MySQL Klasse geschrieben habe und die mittlerweile recht umfangreich, sicher und sehr einfach und praktisch ist, m?chte ich dir die Arbeit ersparen!
Du solltest nat?rlich gucken, wie meine Klasse funktioniert oder dir ein Beispiel daran nehmen und sie nicht stumpf kopieren, da du wahrscheinlich was lernen willst.
Also hier die Klasse "mysql" :
class mysql { #################################################### ## Zu einer MySQL Datenbank verbinden ## #################################################### function mysql ($mysql) { global $error; if (!is_array($mysql)) { $error -> make_error(__FILE__, __LINE__, true, 'Der ?bergebene Parameter ist kein Array und somit kann nicht zur MySQL Datenbank connectet werden!'); } $connect = mysql_connect($mysql["Host"], $mysql["User"], $mysql["Passwort"]); if (!$connect) { $error -> make_error(__FILE__, __LINE__, true, 'Es konnte keine Verbindung zum MySQL Datenbank Server hergestellt werden!'); } $select = mysql_select_db($mysql["Database"], $connect); if (!$select) { $error -> make_error(__FILE__, __LINE__, true, 'Die angegebene Datenabank '.$mysql["Database"].' konnte nicht ausgew?hlt werden!'); } } #################################################### ## Eine Anfrage an eine MySQL Datenbank senden ## #################################################### function query ($sql, $daten = false) { global $error; if ($daten != false) { $daten = $this -> slashes($daten); if (is_array($daten)) { $sql = vsprintf($sql, $daten); } else { $sql = sprintf($sql, $daten); } } $result = mysql_query($sql); if (!$result) { $error -> make_error(__FILE__, __LINE__, true, 'Es ist ein Fehler in einem Query entstanden! Das Query lautete : '.$sql.''); echo 'a'; } $query = array(); while($res = mysql_fetch_array($result)) { $query[] = $res; } return $query; } #################################################### ## Daten in die MySQL Datenbank einf?gen ## #################################################### function insert ($table = false, $daten = false) { global $error; if($table == false || $daten == false) { $error -> make_error (__FILE__, __LINE__, true, 'Ein oder mehrere Parameter fehlen!'); } if(!is_array($daten)) { $error -> make_error (__FILE__, __LINE__, true, 'Der ?bergebene Parameter "\$daten" ist kein Array!'); } $sql = "INSERT INTO `".$this -> slashes($table)."` ("; $i = true; foreach($daten as $index => $Date) { if($i) { $sql .= "".$this -> slashes($index).""; $i = false; } else { $sql .= ", ".$this -> slashes($index).""; } } $sql .= ") VALUES ("; $i = true; foreach($daten as $date) { if($i) { $sql .= "'".$this -> slashes($date)."'"; $i = false; } else { $sql .= ", '".$this -> slashes($date)."'"; } } $sql .= ")"; $result = mysql_query($sql); if (!$result) { $error -> make_error (__FILE__, __LINE__, true, 'Es ist ein Fehler in einem Query enstanden! Das Query lautete : '.$sql.''); return false; } return true; } #################################################### ## Die Anzahl der Eintr?ge in einer Tabelle der ## ## MySQL Datenbank auslesen ## #################################################### function rows ($table, $where = false) { $sql = "SELECT COUNT(id) FROM ".$table; if($where) { $sql .= " WHERE ".$this -> slashes($where); } $result = mysql_query($sql); if (!$result) { $error -> make_error(__FILE__, __LINE__, true, 'Es ist ein Fehler in einem Query entstanden! Das Query lautete : '.$sql.''); } $sum = mysql_result($result, 0); return $sum; } #################################################### ## Etwaige MySQL Injection Versuche verhindern ## #################################################### function slashes ($slashes) { if (is_array($slashes)) { foreach($slashes as $index => $slash) { $slashes[$index] = mysql_escape_string($slash); } } else { $slashes = mysql_escape_string($slashes); } return $slashes; } }
Das ganze wird so benutzt :
$confg = array (); $confg["Host"] = 'http://mysql.lima-city.de'; $confg["User"] = 'USERxxxx'; $confg["Passwort"] = 'xXxXx'; $confg["Database"] = 'dbvwxyz'; $mysql = new mysql ($confg); /* Mehrere Datens?tze ausgeben */ $result = $mysql -> query("SELECT * FROM `%s` LIMIT 0, 1", 'Variable_mit_Wert_der_Datenbank'); foreach($result as $res) { print ($res["Spaltenname"]); } /* Ein Datensatz ausgeben */ $result = $mysql -> query("SELECT link FROM `%s` WHERE anzeigen = '1' ORDER BY `reihenfolge`", 'Variable_mit_Wert_der_Datenbank'); $res = $result[0]; echo $res["Spaltenname"]; /* Daten in die Datenbank einf?gen */ $daten = array (); $daten["Spaltenname"] = 'Wert'; // usw. $mysql -> insert ('Tabellenname', $daten); /* Datens?tze in einer Datenbank z?hlen */ // Z?hlt alle Datens?tze aus der Tabelle "Tabellenname" $all_rows = $mysql -> rows ('Tabellenname'); // oder $sum_rows = $mysql -> rows ('Tabellenname', 'id = \'1\''); // dies z?hlt alle Datens?tze aus der Tabelle "Tabellenname", wessen "id" gleich "1" ist
Ich hoffe ich konnte dir helfen!
-
Vielen Dank f?r die schnelle Antowrt.
Bin gerade dabei deine Klasse nachzuvollziehen ;)
K?nnte mir trotzdem mal jemand sagen, warum bei mir diese dumme Fehlermeldung kommt. Ich sehe einfach nicht was da falsch ist.
MfG Dagar -
Hiho dagar888!
Also erstmal hei?t der Befehl, um SQL-Queries abzusetzen mysql_query() und nicht "mysql_db_query()". Dieser Befehl gibt eine so genannte Resource zur?ck (manchmal sagt man auch Datenbank-Handle). Diese Resource muss im Falle von MySQL-Datenbanken den Typ MySQL-Resource haben. Hat er das nicht, kann das verschiedene Ursachen haben:
1. Es wurde gar keine Verbindung zur Datenbank geschlossen (mysql_connect() hat einen Fehler geliefert).
2. Die Anfrage ("Query") enthielt Fehler. Dann wird keine MySQL-Resource zur?ckgeliefert -- sondern der Boolesche Wert FALSE.
Man sollte daher eine SQL-Abfrage immer so gestalten, dass im Fehlerfall keine weiteren SQL-Befehle wie mysql_fetch_array() mehr ausgef?hrt werden:
$query = "SELECT alter FROM LimaUserListe WHERE user LIKE alopex";
$dbh = $mysql_query($query);
if( $dbh === FALSE ) {
// Es ist ein Fehler aufgetreten
printf("%s<br />", mysql_error() );
// Script beenden
exit();
// Oder im Falle einer Unterfunktion oder
// Object-Methode
// return(FALSE);
}
// Alles okay:
// Ab hier kann man sicher mit
// mysql_fetch_array() hantieren
MfG
alopex
-
Und wie w?hle ich dann die Datenbank aus?
-
Entweder mit
mysql_select_db('datenbankname')
oder eleganter mit
$query = 'USE '.'datenbankname';
$qh = mysql_query($query);
MfG
alopex
-
Vielen Dabk f?r die schnellen antworten.
Hab mein Problem l?sen k?nnen.
Der Thread kann meinetwegen geschlo?en werden.
MfG Dagar -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage