Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
 
 
 

Per Zufall zwei Mysql Tabellen abfragen

Sie befinden sich: Home > Php Tutorial > Per Zufall zwei Mysql Tabel...

Per Zufall zwei Mysql Tabellen abfragen


Eintrag am:  02.12.2009
Hits / Besucher:  4421
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

In diesem Tutorial erfahren Sie, wie Sie mithilfe eines einfachen PHP-Skripts zufällig auf zwei unterschiedliche MySQL-Tabellen zugreifen können. Die Idee dahinter ist, dass man beim Aufruf des Skripts per Zufall entscheidet, welche Tabelle ausgelesen wird. Das kann zum Beispiel nützlich sein, wenn Sie in gewissen Situationen ein Rotationsprinzip auf Ihrer Website abbilden möchten – etwa zum Testen zweier Varianten (A/B-Testing) oder um zufällig generierten Content aus verschiedenen Tabellen anzuzeigen.

Dieses Beispiel wurde inspiriert durch eine Frage in unserem Forum. Neben dem hier vorgestellten Szenario können Sie die Grundidee natürlich auch flexibel auf zwei unterschiedliche Datenbanken anwenden, etwa wenn Sie Inhalte aus getrennten Quellen mischen möchten.


1. Voraussetzungen

Bevor Sie starten, benötigen Sie:

  • Einen MySQL- oder MariaDB-Server, auf den Sie zugreifen können.

  • PHP in einer Version, die MySQLi unterstützt (PHP 7 oder höher wird empfohlen).

  • Zugangsdaten (Host, Datenbankname, Benutzer und Passwort) für die gewünschten Datenbanken/Tabellen.

  • Optional: Zugriff auf phpMyAdmin zur schnellen Einrichtung und Verwaltung der Tabellen.

2. Anlegen der Tabellen

Im Folgenden sehen Sie ein SQL-Statement, mit dem zwei Tabellen, datenbank1 und datenbank2, erstellt werden. Jede Tabelle enthält eine id-Spalte (als Primärschlüssel) sowie eine datenbank-Spalte, in der wir beispielhaft einen kurzen Text speichern.

Kopieren Sie diesen SQL-Code einfach in das SQL-Fenster in phpMyAdmin oder in Ihr MySQL-Client-Tool und führen Sie ihn aus:

CREATE TABLE IF NOT EXISTS `datenbank1` (

`id` int(11) NOT NULL AUTO_INCREMENT,
`datenbank` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2;

INSERT INTO `datenbank1` (`id`, `datenbank`) VALUES
(1, 'Daten von Tabelle: datenbank1');

CREATE TABLE IF NOT EXISTS `datenbank2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datenbank` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2;

INSERT INTO `datenbank2` (`id`, `datenbank`) VALUES
(1, 'Daten von Tabelle: datenbank2');

Beachten Sie, dass im obigen Beispiel MyISAM als Speicher-Engine verwendet wird. In vielen modernen Umgebungen wird jedoch InnoDB empfohlen, insbesondere wegen der besseren Unterstützung von Transaktionen und Fremdschlüsseln. Passen Sie diesen Teil gegebenenfalls an Ihre Bedürfnisse an.


2.1 Struktur von datenbank1

Feld Typ
id int(11), AUTO_INCREMENT, Primärschlüssel
datenbank varchar(255)

2.2 Struktur von datenbank2

Feld Typ
id int(11), AUTO_INCREMENT, Primärschlüssel
datenbank varchar(255)

3. Das PHP-Skript – Zufälliger Tabellenzugriff

Sobald Sie die Tabellen erstellt haben, können Sie mit dem folgenden PHP-Skript zufällig auf eine der beiden Tabellen zugreifen. Das Skript wählt per PHP-Funktion rand() entweder datenbank1 oder datenbank2 aus und gibt die Inhalte auf der Webseite aus.

<?php

/**
* --- Konfigurationsblock für Datenbank 1 ---
*/
$host['1'] = 'localhost';
$user['1'] = 'root';
$passwort['1'] = '***';
$datenbank['1'] = 'zufall_test';
$table['1'] = 'datenbank1';

/**
* --- Konfigurationsblock für Datenbank 2 ---
*/
$host['2'] = 'localhost';
$user['2'] = 'root';
$passwort['2'] = '***';
$datenbank['2'] = 'zufall_test';
$table['2'] = 'datenbank2';

/**
* Zufällige Auswahl der Datenbank
* count($host) ermittelt, wie viele Datenbanken konfiguriert sind.
*/
$zufall_key = rand(1, count($host));

/**
* MySQLi-Verbindung aufbauen
*/
$db = new mysqli(
$host[$zufall_key],
$user[$zufall_key],
$passwort[$zufall_key],
$datenbank[$zufall_key]
);

/**
* Fehlerbehandlung bei Verbindungsproblemen
*/
if ($db->connect_error) {
die('Verbindung fehlgeschlagen: ' . $db->connect_error);
}

/**
* SQL-Abfrage für die zufällig gewählte Tabelle erstellen
*/
$sql_select = "SELECT id, datenbank FROM `" . $table[$zufall_key] . "`;";

/**
* Abfrage ausführen und Ergebnis speichern
*/
$result = $db->query($sql_select);

/**
* Falls ein Ergebnis vorliegt, alle Datensätze ausgeben
*/
if ($result) {
echo '<strong>ID</strong>;<strong>Datenbank</strong><br>';
while ($daten = $result->fetch_assoc()) {
echo $daten["id"] . ';' . $daten["datenbank"] . '<br>';
}
} else {
echo 'Es sind keine Daten vorhanden!';
}

/**
* Verbindung schließen
*/
$db->close();
?>

Die Ausgabe könnte dann zum Beispiel folgendermaßen aussehen:

ID;Datenbank

1;Daten von Tabelle: datenbank1

Oder alternativ, wenn gerade die zweite Tabelle ausgewählt wird:

ID;Datenbank

1;Daten von Tabelle: datenbank2

4. Schritt-für-Schritt-Erklärung

  1. Datenbankkonfiguration: Im Skript definieren Sie für jede Datenbank (in diesem Beispiel datenbank1 und datenbank2) Host, Benutzername, Passwort und Datenbanknamen. Diese Variablen ($host, $user, $passwort, $datenbank sowie $table) werden in Arrays gespeichert, um einfach darauf zugreifen zu können.

  2. Zufallsauswahl: Mit rand(1, count($host)) wird bestimmt, welcher Index (1 oder 2) ausgewählt wird. Dadurch entscheiden Sie, ob der Zugriff auf datenbank1 oder datenbank2 erfolgt.

  3. MySQLi-Verbindung: Nachdem der Zufallsindex feststeht, wird mit den entsprechenden Zugangsdaten eine Verbindung zur Datenbank hergestellt. Hierbei kommt new mysqli() zum Einsatz. Tritt dabei ein Fehler auf, beendet das Skript per die()-Funktion und gibt eine Fehlermeldung aus.

  4. SQL-Abfrage: Mithilfe eines SELECT-Statements werden alle Datensätze aus der ausgewählten Tabelle abgerufen. Es werden die Felder id und datenbank abgefragt.

  5. Ergebnis-Auswertung: Das Ergebnis der Abfrage wird in $result gespeichert. Existieren keine Datensätze oder tritt ein Fehler auf, gibt das Skript eine Meldung aus. Ansonsten werden die ausgelesenen Felder per Schleife (while) in HTML ausgegeben.

  6. Verbindung schließen: Nach dem erfolgreichen Auslesen wird die Verbindung zur Datenbank wieder mit $db->close() geschlossen.

5. Anwendungsfälle und Erweiterungen

Das gezeigte Skript ist besonders nützlich, wenn Sie Inhalte per Zufall zwischen mehreren Tabellen oder sogar mehreren Datenbanken ausgeben möchten. Hier einige Ideen, wie Sie das Skript erweitern können:

  • Zufällige Bildausgabe: Speichern Sie URLs von Bildern in den Tabellen und geben Sie jeweils eines zufällig aus – zum Beispiel für einen Slider oder einen zufälligen Header.

  • Zufällige Textbausteine: Lassen Sie jeden Seitenaufruf verschiedene Begrüßungstexte oder Zitate präsentieren.

  • Auswahl unter mehr als zwei Tabellen: Fügen Sie einfach zusätzliche Einträge in das Array $table und die zugehörigen Host-, Benutzer- und Passwort-Daten in $host, $user und $passwort hinzu. Die Zeile rand(1, count($host)) berücksichtigt dann automatisch weitere Tabellen.

  • A/B-Tests: Zeigen Sie abwechselnd zwei Varianten Ihrer Webseite oder bestimmter Inhalte an, um zu testen, welche Version höhere Klickraten oder bessere Nutzerinteraktion erreicht.

Weitere Beispiele zum zufälligen Ausgeben von Daten finden Sie in unseren Beiträgen über die zufällige Bildausgabe oder das zufällige Ausgeben von Text. Wenn Sie Fragen haben, schauen Sie doch gerne in unserem Supportforum vorbei und diskutieren Ihre Ideen mit anderen Webmastern.


6. Sicherheit und Best Practices

Auch wenn dieses Beispiel die Grundlagen gut veranschaulicht, sollten Webmaster unbedingt zusätzliche Sicherheitsaspekte beachten, sobald die Skripte im echten Produktionsumfeld laufen:

  • Verbindungsdaten schützen: Speichern Sie Datenbank-Zugangsdaten (Host, Benutzer, Passwort) nicht direkt im Quellcode, sondern in einer Konfigurationsdatei außerhalb des öffentlich zugänglichen Webverzeichnisses oder verwenden Sie Umgebungsvariablen.

  • Fehlerbehandlung: Verwenden Sie aussagekräftige Fehlermeldungen, aber geben Sie keine sensiblen Informationen (z.B. vollständige SQL-Fehler) auf Live-Systemen aus. Loggen Sie Fehler besser in ein internes Protokoll.

  • Prepared Statements: Falls Sie Benutzereingaben (etwa via GET-/POST-Parameter) in Ihre SQL-Abfragen einbauen, nutzen Sie vorbereitete Anweisungen (Prepared Statements), um SQL-Injection zu verhindern.

  • Datentypen überprüfen: Validieren Sie Benutzereingaben (z.B. falls $zufall_key aus einem Formular kommt) und stellen Sie sicher, dass nur numerische Werte übergeben werden.

  • Regelmäßige Updates: Halten Sie Ihren Server, Ihre PHP-Version sowie Ihren Datenbankserver aktuell, um Sicherheitslücken zu schließen.

Fazit

Mit wenig Aufwand können Sie in PHP mehrere Datenbanken oder Tabellen anbinden und per Zufallsauswahl abfragen. Das gezeigte Skript eignet sich hervorragend, um variierenden Content auf Ihrer Website anzuzeigen, A/B-Tests durchzuführen oder einfach nur verschiedene Datensätze zu präsentieren. Mit ein paar Sicherheitsvorkehrungen und angepassten Abfragen ist das Konzept vielseitig einsetzbar und kann jederzeit erweitert werden, zum Beispiel für Komplexere Anwendungen oder große Datenbestände.

Tipp: Experimentieren Sie weiter mit anderen Datenquellen oder erweitern Sie das Skript, sodass mehrere Zufallsabfragen nacheinander ausgeführt werden. Wenn Sie weitere Fragen haben, besuchen Sie gerne unser Supportforum, in dem Webmaster Ihnen bei Problemen und Ideen weiterhelfen!

 

Tags:

 

Artikel hinzufügen bei:
         
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.