PHP Schleife gesucht zur Abfrage mehrerer MySQL Datenbanken
bin mit meinen php Kenntnissen wieder an eine Grenze gestossen. Ich will in mehreren Datenbanken nach eindeutigen Daten suchen, weiss aber nicht, wie ich so eine Schleife aufbauen muß
Hallo Forum,
leider bin ich mit meinen php-Kenntnissen wieder an eine Grenze gestoßen.
Mein Ziel ist ein Abfrage durch mehrere Datenbanken durchzuführen. Zum besseren Verständnis:
für jeden Kunden existiert in meinem MySQL Server eine eigene Datenbank, darin ist auch nur eine Tabelle. In diese Datenbank laufen täglich Bewegungssätze, sie werden also wirklich täglich größer.
Für jeden Kunden gibt es eindeutige Informationen, die es nur bei ihm gibt. Nennen wirs mal Artikel-Nummer. Artikel-Nummern können nicht mehrfach vorkommen, sie sind eindeutig einem Kunden zugeordnet.
Jetzt kommt ein Artikel zur Reparatur zurück, plötzlich liegen 10 Geräte da, oder 20. Ich will jetzt schnell nachschauen können, bei welchem Kunden dieses eine bestimmte Gerät Bewegungsdaten erzeugt hat.
Ich denke an eine Schleife, die Datenbank 1 öffnet, alles nach dieser Nummer durchsucht, und wenn nichts gefunden wurde, diese Datenbank schließt, die nächste öffnet, alles durchsucht, usw., bis mir der Kunde angezeigt wird, bei dem dieses Gerät im Einsatz war.
Und da brauche ich Hilfe. Ich weiss nicht, wie ich so eine Schleife aufbauen soll. Ich habe zwar alle Zugangsdaten zu den Kunden in einer eigenen Datenbank liegen, die ich abfragen kann, aber wie stelle ich es an, bei einer Fehlabfrage die Verbindung zu trennen, automatisch die nächste Datenbank abzufragen, usw.
Hat jemand von Euch so was schon mal gemacht?
Jeder Tip bringt mich weiter.
Vielen Dank für jede Idee.
Schöne Grüße
Christof
Hallo Forum,
leider bin ich mit meinen php-Kenntnissen wieder an eine Grenze gestoßen.
Mein Ziel ist ein Abfrage durch mehrere Datenbanken durchzuführen. Zum besseren Verständnis:
für jeden Kunden existiert in meinem MySQL Server eine eigene Datenbank, darin ist auch nur eine Tabelle. In diese Datenbank laufen täglich Bewegungssätze, sie werden also wirklich täglich größer.
Für jeden Kunden gibt es eindeutige Informationen, die es nur bei ihm gibt. Nennen wirs mal Artikel-Nummer. Artikel-Nummern können nicht mehrfach vorkommen, sie sind eindeutig einem Kunden zugeordnet.
Jetzt kommt ein Artikel zur Reparatur zurück, plötzlich liegen 10 Geräte da, oder 20. Ich will jetzt schnell nachschauen können, bei welchem Kunden dieses eine bestimmte Gerät Bewegungsdaten erzeugt hat.
Ich denke an eine Schleife, die Datenbank 1 öffnet, alles nach dieser Nummer durchsucht, und wenn nichts gefunden wurde, diese Datenbank schließt, die nächste öffnet, alles durchsucht, usw., bis mir der Kunde angezeigt wird, bei dem dieses Gerät im Einsatz war.
Und da brauche ich Hilfe. Ich weiss nicht, wie ich so eine Schleife aufbauen soll. Ich habe zwar alle Zugangsdaten zu den Kunden in einer eigenen Datenbank liegen, die ich abfragen kann, aber wie stelle ich es an, bei einer Fehlabfrage die Verbindung zu trennen, automatisch die nächste Datenbank abzufragen, usw.
Hat jemand von Euch so was schon mal gemacht?
Jeder Tip bringt mich weiter.
Vielen Dank für jede Idee.
Schöne Grüße
Christof
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102315
Url: https://administrator.de/forum/php-schleife-gesucht-zur-abfrage-mehrerer-mysql-datenbanken-102315.html
Ausgedruckt am: 08.04.2025 um 19:04 Uhr
10 Kommentare
Neuester Kommentar
Guten Morgen,
mal abgesehen davon, dass du anstelle pro Kunde gleich eine neue Datenbank anzulegen, lieber eine neue Tabelle hättest nehmen sollen,
gibt es in PHP den Befehl
Dieser macht aber nur Sinn, wenn du einen Benutzer hast, der auf alle Datenbanken zugreifen kann.
Mit mysql_list_dbs() bekommst du die Liste deiner Datenbanken.
Die genaue Befehssyntax kannst du unter
Manual mit der Suchfunktion oben rechts nachlesen.
Gruß und viel Erfolg
Locke
mal abgesehen davon, dass du anstelle pro Kunde gleich eine neue Datenbank anzulegen, lieber eine neue Tabelle hättest nehmen sollen,
gibt es in PHP den Befehl
mysql_select_db("deine_Datenbank")
.Dieser macht aber nur Sinn, wenn du einen Benutzer hast, der auf alle Datenbanken zugreifen kann.
Mit mysql_list_dbs() bekommst du die Liste deiner Datenbanken.
Die genaue Befehssyntax kannst du unter
Manual mit der Suchfunktion oben rechts nachlesen.
Gruß und viel Erfolg
Locke
Hallo Christof,
so schwer ist das auch nicht.
Das sollte es im Groben schon sein.
Das, was in -><- steht, muß natürlich noch angepasst werden.
Das Script ist also nicht funktionsfähig, so, wie es hier steht!
Falls evtl Fehler im Script sind, oder jemand Verbesserungsvorschläge hat, ich bin für konstruktive Kritik gern zu haben...
So dann noch ein schönes Wochenende
Gruß
Locke
so schwer ist das auch nicht.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
//ArtikelID dem Script übergeben
->$ArtikelID = GET/POST/SESSION...<-
// Zugangsdaten besorgen und in ein Array speichern
$db_connect = mysql_connect(->DB_Zugangsdaten<-);
$sql_string = "SELECT * FROM Tbl_Zugangsdaten";
$erg = mysql_query($sql_string);
while($temp = mysql_fetch_oject($erg))
$Array_Zugangsdaten = $temp;
// Speicher freigeben und Verbindung beenden
mysql_free_result();
mysql_close($db_connect);
// Hauptschleife
foreach($Array_Zugangsdaten AS $key => $Zugangsdatensatz)
{
$db_connect = mysql_connect(->$Zugangsdatensatz->DB_Name/User/Pw<-);
$sql_string = "SELECT * FROM ".$Zugangsdatensatz->Tbl_name." WHERE ArtikelID = ".$ArtikelID;
$erg = mysql_query($sql_string);
while($temp = mysql_fetch_object($erg))
$Array_Ergebnis = $temp;
mysql_free_result();
mysql_close($db_connect);
}
//Ausgabe des Ergebnisarrays oder Weiterverarbeitung
var_dump("<pre>", $ArrayErgebnis, "</pre>");
?>
Das sollte es im Groben schon sein.
Das, was in -><- steht, muß natürlich noch angepasst werden.
Das Script ist also nicht funktionsfähig, so, wie es hier steht!
Falls evtl Fehler im Script sind, oder jemand Verbesserungsvorschläge hat, ich bin für konstruktive Kritik gern zu haben...
So dann noch ein schönes Wochenende
Gruß
Locke
Hi gechger,
die Zugangsdaten sind eigentlich nicht relevant, es sei denn, du hättest den
Administrator, der ja Zugriff auf alle Datenbanken haben sollte, aus den DB's ausgesperrt.
Das folg. Script stellt ein Formular dar, in dem ein Spaltenname und ein Suchbegriff
eingegeben werden.
Nach Senden des Formulars werden die entsprechenden Spaltennamen jeder Tabelle
in jeder Datenbank nach dem Suchbefriff "abgeklappert" und die Ergebnisse aufgelistet.
Gruß
Günni
die Zugangsdaten sind eigentlich nicht relevant, es sei denn, du hättest den
Administrator, der ja Zugriff auf alle Datenbanken haben sollte, aus den DB's ausgesperrt.
Das folg. Script stellt ein Formular dar, in dem ein Spaltenname und ein Suchbegriff
eingegeben werden.
Nach Senden des Formulars werden die entsprechenden Spaltennamen jeder Tabelle
in jeder Datenbank nach dem Suchbefriff "abgeklappert" und die Ergebnisse aufgelistet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<html>
<head>
<title>Untitled</title>
</head>
<body>
<form action="multi-db-abfrage.php" method="post">
Spalte <input type="text" name="spaltenname" />
Suchbegriff <input type="text" name="ausdruck" />
<input type="submit" name="cmd" value="Suche" />
</form>
<?
$cmd=$_POST['cmd'];
if($cmd){
$conn=mysql_connect("localhost","admin_name","admin_passwort");
/*
Datenbanknamen in einer Variablen ablegen
*/
$db_list = mysql_list_dbs();
$i=0;
/*
Anzahl Datenbanknamen in einer Variablen ablegen
*/
$count = mysql_num_rows($db_list);
/*
Nacheinander den Datenbanknamen extrahieren ...
*/
while ($i < $count) {
$dbs=mysql_db_name($db_list,$i);
/*
... alle Tabellen der Datenbank in einer Variablen ablegen ...
*/
$table_list=mysql_list_tables($dbs);
if(!mysql_num_rows($table_list)){
echo "DB: $dbs<br>";
echo "Keine Tabellen in Datenbank $dbs";
echo "<hr>";
}else{
echo "DB: $dbs<br>";
/*
... Datenbank auswählen ...
*/
$db_open=mysql_select_db($dbs);
/*
... Tabellen aus der Variablen extrahieren ...
*/
while ($table=mysql_fetch_row($table_list)) {
/*
... Suchausdruck aus Formular in Variablen ablegen ...
*/
$spalte=$_POST['spaltenname'];
$ausdruck=$_POST['ausdruck'];
echo "Inhalt Tabelle $table - Suche in Spalte $spalte nach $ausdruck:<br><br>";
/*
... Tabellen abfragen und Ergebnis ausgeben.
*/
$query="select * from ".$table." where $spalte='$ausdruck'";
$result=mysql_query($query);
if(!$result) continue;
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
if($row) echo "<font color='red'>";
echo implode(" ",$row)."<br><br>";
echo "<font color='black'>";
}
}
echo "<hr>";
}
$i++;
}
}
?>
</body>
</html>
Gruß
Günni
Hi gechger,
zu deiner Kundenabfrage:
Mit . . .
. . . hast du genau einen Datensatz in $kdarray gespeichert.
Deshalb auch: Außerdem gibt mir meine ECHO immer nur den selben Kunden aus dem Array aus
Die Daten solltest du auch in einer Schleife abfragen und speichern:
Zur Anmeldung und Auswahl der Tabelle:
Da der Username dem Datenbanknamen entspricht und man mit Funktionen die Namen
der Tabellen abfragen kann, sind weitere Spalten wie $kdarray[tabelle], $kdarray[dbname]
usw. doch eigentlich unnötig.
Im folg. Script hab ich das Kunden-Array "von Hand" angelegt.
Gruß
Günni
zu deiner Kundenabfrage:
Mit . . .
1
2
3
4
5
2
3
4
5
<?php
$sql=("select * from kddaten order by name");
$abfrage = mysql_db_query($dbname,$sql);
$kdarray=mysql_fetch_array($abfrage);
?>
Deshalb auch: Außerdem gibt mir meine ECHO immer nur den selben Kunden aus dem Array aus
Die Daten solltest du auch in einer Schleife abfragen und speichern:
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$i=0;
while($row=mysql_fetch_array($abfrage,MYSQL_ASSOC)){
$kunden_array[$i][anmeldung]=$row['kennwort'];
$kunden_array[$i][passwort]=$row['passwort'];
$i++;
}
?>
Zur Anmeldung und Auswahl der Tabelle:
Da der Username dem Datenbanknamen entspricht und man mit Funktionen die Namen
der Tabellen abfragen kann, sind weitere Spalten wie $kdarray[tabelle], $kdarray[dbname]
usw. doch eigentlich unnötig.
Im folg. Script hab ich das Kunden-Array "von Hand" angelegt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<form action="multi-user-db-abfrage.php" method="post">
Spalte <input type="text" name="spaltenname" />
Suchbegriff <input type="text" name="ausdruck" />
<input type="submit" name="cmd" value="Suche" />
</form>
<?
/*
**********************************
Kundenarray aus Datenbank füllen
**********************************
Das Array hab ich jetzt mal erstellt
*/
$kunden_array=array("kunde" => "kennwort","pass" => "passwort");
$kunden_array[1]=array("kunde" => "kennwort","pass" => "passwort");
$cmd=$_POST['cmd'];
if($cmd){
$i=0;
$count=count($kunden_array);
while ($i < $count) {
//Verbindung herstellen, Kundenname = Datenbankname ...
$conn=mysql_connect("localhost",$kunden_array[$i][kunde],$kunden_array[$i][pass]);
$db=mysql_select_db($kunden_array[$i][kunde]);
/*
... alle Tabellen der Datenbank in einer Variablen ablegen ...
*/
$table_list=mysql_list_tables($kunden_array[$i][kunde]);
if(!mysql_num_rows($table_list)){
echo "DB: ".$kunden_array[$i][kunde]."<br><br>";
echo "Keine Tabellen in Datenbank ".$kunden_array[$i][kunde];
echo "<hr>";
}else{
echo "DB: ".$kunden_array[$i][kunde]."<br><br>";
while ($table=mysql_fetch_row($table_list)) {
/*
... Suchausdruck aus Formular in Variablen ablegen ...
*/
$spalte=$_POST['spaltenname'];
$ausdruck=$_POST['ausdruck'];
echo "Inhalt Tabelle $table - Suche in Spalte $spalte nach $ausdruck:<br><br>";
/*
... Tabellen abfragen und Ergebnis ausgeben.
*/
$query="select * from ".$table." where $spalte='$ausdruck'";
$result=mysql_query($query);
if(!$result) continue;
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
if($row) echo "<font color='red'>";
echo implode(" ",$row)."<br><br>";
echo "<font color='black'>";
}
}
mysql_close($conn);
echo "<hr>";
}
$i++;
}
}
?>
</body>
</html>
?>
Gruß
Günni