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ä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ä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:
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.
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ä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ä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.