• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySQL Klasse mach nen Fehler, der nicht sien soll

Status
Für weitere Antworten geschlossen.

CrackPod

Neues Mitglied
Servus,

ich habe mir eine MySQL Klasse geschrieben, mit der ich vorhabe mehr wie eine DB-Connection offen zu haben, ohne, das ich nach jedem Query den link_identifier dranhängen muss.

Meine mysql-klasse.php sieht wie folgt aus:
[php:1:0336859848]
<?php
class MySQL {
var $query;
var $verbindung;
function MySQL ($host = "localhost", $user = "root", $pw = "", $db = "") { #der Konstruktor
$this->verbinden($host,$user,$pw);
if($this->verbindung) {
echo 'Verbunden(host:'.$host.')'.$this->verbindung;
}
if($this->datenbankAuswahl($db)) {
echo '
DB: '.$db.' ausgew&auml;hlt.
';
}
}
function verbinden($host,$user,$pw) { #Verbindet mit dem MySQL Server
$this->verbindung = mysql_connect($host, $user, $pw);
}
function datenbankAuswahl($db) { #Wählt eine Datenbank aus
if(mysql_select_db($db,$this->verbindung)) return true;
}
function datenbankQuery($query) { #Verarbeitet jeden MySQL-Query
$this->query = mysql_query($query,$this->verbindung);
if($this->query) {
return $this->query; #Bei Erfolg wird der Query zurückgegeben.
}
else {
$this->datenbankFehler(); #Bei einem Fehler wird die Fehlerfunktion aufgerufen.
}
}
function datenbankFehler() { #Wenn es bei einem Query einen Fehler gab, dann kommt diese Funktion zum Einsatz.
echo '<p class="rot">Es ist ein Fehler w&auml;hrend der Datenbankoperation aufgetreten.
(#'.mysql_errno($this->verbindung).' - '.mysql_error($this->verbindung).')</p>';
}
function connectionClose() { #Der Destruktor
if(mysql_close($this->verbindung)) {
echo 'Verbindung getrennt.';
}
}
}
?>
<html>
<head>
<style type="text/css">
.rot {
color:#990000;
font-weight:bold;
}
</style>
</head>
<body>
<?php
echo '

GFX-F Datenbankverbindung:</p>';
$gfx_force = new MySQL ('localhost','root','','gfx-force');
$sql = "SELECT `nick` FROM `user`";
$result = $gfx_force->datenbankQuery($sql);
echo '

GFX-F Datenbankanfrage:('.$result.'|'.$sql.')</p>';
while($u_name = mysql_fetch_object($result)) {
echo $u_name->nick;
}
echo '

LM Datenbankverbindung:</p>';
$lm = new MySQL ('localhost','root','','lm');
$sql = "SELECT * FROM `news_kommentare`";
$result = $lm->datenbankQuery($sql);
echo '

LM Datenbankanfrage:('.$result.'|'.$sql.')</p>';
while($kmt = mysql_fetch_object($result)) {
echo $kmt->kommmentar.'
';
}
$sql = "SELECT `nick` FROM `user`";
$result = $gfx_force->datenbankQuery($sql);
echo '

GFX-F Datenbankanfrage:('.$result.'|'.$sql.')</p>';
while($u_name = mysql_fetch_object($result)) {
echo $u_name->nick;
}
$lm->connectionClose();
$gfx_force->connectionClose();
?>
</body>
</html>
[/php:1:0336859848]

Meine Ausgabe sieht nach diesem Quellcode fogendermaßen aus:
GFX-F Datenbankverbindung:
Verbunden(host:localhost) Resource id #1
DB: gfx-force ausgewählt.


GFX-F Datenbankanfrage: (Resource id #2 | SELECT `nick` FROM `user`)
CrackPodTest


LM Datenbankverbindung:
Verbunden(host:localhost) Resource id #1
DB: lm ausgewählt.


LM Datenbankanfrage: (Resource id #3 | SELECT * FROM `news_kommentare`)[/i]
Hallo ich hab ein Kommentar geschrieben
Hi, hier noch ein 2. Kommentar
Hi, hier noch ein 2. Kommentar


Es ist ein Fehler während der Datenbankoperation aufgetreten.
(#1146 - Table 'lm.user' doesn't exist)



GFX-F Datenbankanfrage: ( | SELECT `nick` FROM `user`)

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\apachefriends\xampp\htdocs\webdesign\mysql-klasse.php on line 69

Ich versteh nur nicht so genau, warum es nicht geht, denn, wenn ich bei jedem mysql_query den link_identifier hinschreibe, dann müsste ich doch mehrere Datenbankanfragen auf verschiedene Datenbanken schicken können, ohne eine Fehlermeldung zu bekommen, oder etwa nicht?
Den link_identifier hänge ich bei jedem Funktionsaufruf dran:
[php:1:0336859848]<?php
function verbinden($host,$user,$pw) {
$this->verbindung = mysql_connect($host, $user, $pw); #In der var verbindung der Klasse wird durch mysql_connect() der link_identifier gespeichert.
}
function datenbankQuery($query) {
$this->query = mysql_query($query,$this->verbindung); #Da in der var verbindung der link_identifier gespeichert ist, wird er so, bei jeder Anfrage mitgeschickt, um die Anfrage zuordnen zu können.
if($this->query) {
return $this->query;
}
else {
$this->datenbankFehler();
}
}
?>[/php:1:0336859848]

Aber es geht komischerweise nicht, wie man an der Ausgabe sieht... >.<

PHP Version: 5.0.4
MySQL Version: (Client API version:) 4.1.7

Noch eine kleine Information:
Der link_identifier wird auf SelfPHP mit Verbindungs-Kennung betitelt. Dreamweaver schreibt es aber als link_identifier. Deswegen habe ich das auch so geschrieben. Soll nur zum besseren Verstädnis dienen.
 
Werbung:
[GFX-F Datenbankanfrage: ( | SELECT `nick` FROM `user`) << beim 3. fehlt die Verdindugs Kennung ! deswegen wird die letzte genommen (die von LM)]
ah ne die wird nur net ausgeben -versuch trotzdem mal das mit var_dump()
ich kann es mir aber net erklaeren
mach mal vor dem mysql_query ein
[php:1:6625fc80ac]
echo var_dump($this->verbindung);
[/php:1:6625fc80ac]
 
[php:1:7b904ecc78]<?php
function datenbankQuery($query) { #Verarbeitet jeden MySQL-Query
$this->query = mysql_query($query,$this->verbindung);
echo '<p class="gruen">'.var_dump($this->verbindung).'</p>';
if($this->query) {
return $this->query; #Bei Erfolg wird der Query zurückgegeben.
}
else {
$this->datenbankFehler(); #Bei einem Fehler wird die Fehlerfunktion aufgerufen.
}
}
?>[/php:1:7b904ecc78]
So sieht die Funktion jetz aus...

Ausgabe:
GFX-F Datenbankverbindung:
Verbunden(host:localhost) Resource id #1
DB: gfx-force ausgewählt.

resource(1) of type (mysql link)

GFX-F Datenbankanfrage: (Resource id #2 | SELECT `nick` FROM `user`)
CrackPodTest

LM Datenbankverbindung:
Verbunden(host:localhost) Resource id #1
DB: lm ausgewählt.

resource(1) of type (mysql link)

LM Datenbankanfrage: (Resource id #3 | SELECT * FROM `news_kommentare`)
Hallo ich hab ein Kommentar geschrieben
Hi, hier noch ein 2. Kommentar
Hi, hier noch ein 2. Kommentar

resource(1) of type (mysql link)

Es ist ein Fehler während der Datenbankoperation aufgetreten.
(#1146 - Table 'lm.user' doesn't exist)


GFX-F Datenbankanfrage: ( | SELECT `nick` FROM `user`)

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\apachefriends\xampp\htdocs\webdesign\mysql-klasse.php on line 74

Hilft dir das was? Mir nämlich irgendwie ned... :lol:
 
Werbung:
doch da stehts doch:
die verbindungs kennung nr 1 wird von dem 2. mysql_connect ueberschrieben.
:wink:
ich guck mal bei php.net
ich hab es. nimm mal folgendes:
[php:1:c4eafc9620]
function verbinden($host,$user,$pw) { #Verbindet mit dem MySQL Server
$this->verbindung = mysql_connect($host, $user, $pw,true);
}
[/php:1:c4eafc9620]
 
was bewirkt das true?
das die verbindungskennung nicht überschrieben wird?

Edit:
Meine vermutugn war richtig :) freude :D
Dankeschön...
Jetz gehts
 
ja er bewirkt das immer eine neue verbindung aufgebaut wird :)
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben