In Funktion 2. SQL-Verbindung..aber ohne Erfolg...

Sebigf

Erfahrenes Mitglied
Hallo zusammen!

Ich habe eine Funktion gebaut, die aber noch nicht funktioniert ^^^^^

In dieser Funktion geht es darum, dass man wahlweise eine Verb. zu externen (wenn gewünscht) hergestellt wird.

Es liegt ja auf der Hand, dass man dazu noch ein weiteres mysql_connect verwenden muss.

Nun ist es aber so, das wenn ich die passenden Daten eingebe und die func. aufrufe folgende meldung kommt...

Code:
Warning:  mysql_query(): Access denied for user: 'wwwrun@localhost' (Using password: NO) in /home/htdocs/.....index.php on line 139

Ich denke mal, es liegt daran, dass an dieser stelle normalerweise auch daten ausgelesen werden sollen (aus 1. verbindung).

Ich habe zwar in der func. ein mysql_close() gesetzt, aber es schein nicht zu gehen.

Vll. kann es daran liegen, dass "vorher" zur 1. verbunden wird und in der functions datei halt das 2. mal (forum func.) !?

#### Nachtrag

Habe ich vergessen zu sagen...

Die 1. Verb. ist genau wie die 2. "localhost". Liegt auch auf dem gleichen server, ist aber eine andere Datenbank (name)

Bitte dringend um Hilfe!

Danke!
 
Zuletzt bearbeitet:
Hallo,
hier im Forum hat irgendjemand mal genau das gleiche Problem gehabt. Soweit ich mich erinnere, wurde das dadurch gelöst, dass er einmal als Host localhost und das andere mal 127.0.0.1 verwendet hat. Vielleicht funktioniert das ja auch bei dir so.

mfg
forsterm
 
Hallo!

Ja, das habe ich selber auch schon nachlesen können :)
Geht aber leider nicht...

Hier mal der Connect

Code:
	if(!empty($board[0]) && !empty($board[2]) && !empty($board[3]))
	$connect = mysql_connect($board[0],$board[2],$board[3]);
	mysql_select_db($board[1]) or die("Fehler beim Öffnen der Datenbank!");


	mysql_close($connect);

Sollte alles erklären.... Ist halt vom array ^^
 
Mmh, ich habe die ganze Nacht herum probiert, aber es scheint einfach nicht zu gehen.
Ich glaube das Problem liegt einfach darin, dass alte Querys eben keine bezugsquelle mehr haben und daher dieser fehler entsteht.

Allerdings habe ich keine Ahnung warum das so ist, und wie man es lösen könnte.
Der mysql_connect ist ja in einer Funktion und wird ja auch wieder geschlossen....

Bin echt verzweifelt diesmal....

Wenn einer eine Idee hat, her damit ;)
 
Hallo nochmal!

Also dieses Thema scheint bei mir einfach nicht zu enden. Ich habe etliche Sachen ausprovbiert, aber es geht einfach nicht.

Kann ich vielleicht etwas mit mysql_pconnect() machen? Oder spielt das in diesem Falle keine Rolle, wie ich das anstelle ?

Ich schildere mein Problem nun noch einmal, falls es jemand nicht ganz verstanden hat, was mein Problem ist.

Es ist folgendes...

-Verb. A (Hauptverbindung
-Verb. B (neue Verb.)

A ist verbunden, dann möchte ich mit einer function die B einbinden, um innerhalb der func. Dateien (z.b. externes forum) auslesen zu können. Aber nach dem nutzen der func. brache ich auch wieder A.

Also ist es ein wechsel: A -> B -> A
Aber dass muss alles innerhalb einer func. passieren...

Danke für jede Hilfe, bin mit meinem Latain am ende ;)
 
Hallo,

Ganz simpel gedacht deutet die Fehlermeldung erstmal darauf hin, dass du falsche Zugangsdaten verwendest oder dein Useraccount in der entfernten Datenbank nicht mit den entsprechenden Berechtigungen eingerichtet wurde.

Sollte dies nicht der Grund sein, würde ich dir mal empfehlen, PDO zu testen. Das ist in PHP 5.1.1 standardmäßig dabei und für PHP4 als Zusatzmodul zu haben. Zudem abstrahiert es dir gleich noch den Datenbankzugriff, so dass du zu anderen Datenbanksystem kompatibel bleibst.
 
Okay, Korrektur.

Du möchtest 2 mal lokal connecten.

Der Fehler tritt genau in dem Moment auf, wenn du nach der Abfrage auf der 2. DB nochmal auf die alte DB zugreifen möchtest, oder?

Tritt der Fehler noch auf, wenn du in jedes mysql_query als 2. Parameter die Ressourcen-Kennung, die du vom zugehörigen mysql_connect bekommen hast, mit übergibst?

Wenn ja, solltest du auf der DB die Berechtigungen checken. Wenn nein, viel Spaß.

Gruß,
Christian
 
Hallo!

Ja, habe ich auch probiert, gibt aber immer die genannte meldung aus.

Ich habe es soweit hinbekommen, nämlich so (schema)

-- 1.Verbindung herstellen
- Function mit 2. Verbindung starten / beenden
-- 1.Verbindung "wieder" herstellen

Nun meine Frage dazu: geht das so ohne weiteres oder ist es nicht sinnvoll ?
Ich glaube es ist sehr "unsauber", das ganze so zu handlen... aber anders scheint es einfach nicht zu gehen...

PS: die sache mit deiner ID klingt sinnvoll, habe ich aber nicht wirklich hinbekommen, da ich etliche querys habe, die ohne ID erstellt wurden und somit viel bearbeitungsaufwand mit sich bringen...
 
Okay, also scheint die zuerst aufgerufene Verbindung verloren zu gehen, wenn du eine zweite startest. Also wenn es so funktioniert, funktioniert es so.

Du merkst aber jetzt schon, dass das ganze recht unübersichtlich strukturiert zu sein scheint.

Besser wärs vielleicht, wenn du künftig versuchst, solche kritischen Punkte an einer Stelle zusammenzufassen. Würden alle deine DB Zugriffe z.B. über 1 Funktion laufen, würde das in etwa so aussehen
PHP:
function getDBFields( &$ResultArray, $SQLCommand)
{
//bla
}

Du hättest also etliche Male den Aufruf:

getFBFields($ResultArray, $SQLCommand)

Um das Ganze um eine weitere DB Verbindung zu erweitern und trotzdem kompatibel zu bleiben, müsstest du die Funktion nur noch so abändern:

function getDBFields( &$ResultArray, $SQLCommand, $DBResource = mysql_connect(default_verbindungs_parameter))
{
//bla
}

oder so

function getDBFields( &$ResultArray, $SQLCommand, $ConnectExtern = false)
{
if ($ConnectExtern)
{
  mysql_connect(2. db)
}
else
{
 mysql_connect(1. db)
}
}

oder so

function getDBFields( &$ResultArray, $SQLCommand, $DBIndex = 0)
{
  switch( $DBIndex)
  {
    case 0: ...
    case 1: ...
    ......
  }
}

Die Aufrufe müssten dann nur an den Stellen geändert werden, an denen du auf eine andere als die default Datenbank zugreifst.
Die Zuweisung in der Funktionsdeklaration bedeutet, dass er den zugeiwesenen Wert als Standard nimmt, solltest du den Parameter weglassen. Es wird so auch keine Warnung ausgegeben.

Viel Spaß.
 
Zurück