H:\mysql >mysqladmin -u root -proot password xroot

In einem php-Programm auf eine MySQl-Datenbank zugreifen

<?php

$host     = "localhost";
$database = "bibliothek";
$user     = "gast";
$password = "xgast";
$query    = "SELECT * FROM leser";
echo "<p style='color:red'>$query</p>"; // Kontrollausgabe
// mit Datenbank verbinden, Datenbank abfragen und Ergebnis ausgeben
mysql_connect($host,$user,$password);
mysql_select_db($database);
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
    echo $row["LeserName"] . " ";
    echo $row["LeserGeschlecht"] . "<br/>";
}


?>


Die Abfrage durch den Benutzer

Der Benutzer kann über das Internet durch Vermittlung des PHP-Programm auf eine MySQL-Datenbank zugreifen.

Im folgenden Beispiel formuliert der Benutzer irgendeine Anfrage in SQL-Syntax.
Er könnte auf die Idee kommen, den Befehl
    DROP DATABASE bibliothek
zu geben.

Zur Sicherheit muss das PHP-Programm derartige unerlaubte Befehle erkennen und blocken.
In unserem Fall erlaubt die MySQL-Datenbank dem Benutzer gast, unter dessen Account sich das PHP-Programm bei der Datenbank anmeldet, nur den SELECT-Befehl.

<form action="anfrage2.php" method="POST">
    SQL: <input type="text" size="50" name="query">
    <input type="submit" value="Anfrage">
</form>

<?php

$host     = "localhost";
$database =
"bibliothek";
$user     =
"gast";
$password =
"xgast";
$query    =
$_POST["query"];
echo "<p style='color:red'>$query</p>"; // Kontrollausgabe

if ($query != "") {
    $query = str_replace("\\","",$query);
    echo "<p style='color:red'>$query</p>"; // Kontrollausgabe
    mysql_connect($host,$user,$password);
    mysql_select_db($database);
    $result = mysql_query($query);
    
while($row = mysql_fetch_row($result)) {
        
for ($i=0; $i<count($row); $i++) {
        
    echo $row[$i] . " ";
        
}
        
echo "<br/>";
    }
}

?>

Gegenüber der ersten Programmversion wurden wenige Änderungen vorgenommen:
1. Es wird ein Formular angezeigt.
2. Die Anfrage $query wird nicht mehr vorgegeben, sondern dem Formularfeld entnommen.
3. Bei der Übertragung der Formulardaten wird jedem Hochkomma ein \ (Backslash)
    vorangestellt. Das muss mit str_replace entfernt werden.
4. Nach mysql_fetch_row werden diese Daten nacheinander über den Index $i angesprochen.
5. In diesem Beispiel werden alle count($row) Felder angezeigt.


Abfrage mit "optimierter" Oberfläche

Bei Google sind Abfragen der folgenden Art möglich.

Mit Hilfe eines PHP-Programm können wir dem Benutzer eine ähnliche Oberfläche für die Abfrage unserer Datenbank anbieten.

Es wird deutlich, dass PHP-Programm als öffentliche komfortable Schnittstelle zur Datenbank dient.


<form action="anfrage3.php" method="POST">
    SQL: <input type="text" size="50" name="query">
    <input type="submit" value="Anfrage">
</form>


<?php

$host     = "localhost";
$database = "bibliothek";
$user     = "gast";
$password = "xgast";
$query    = $_POST["query"];
echo "<p style='color:red'>$query</p>"; // Kontrollausgabe

if ($query != "") {
    
// erwartet eine query der Form leser.name:erna
    
list($bezeichner,$wert) = split(":",$query);
    
list($datei,$feld) = split("\.",$bezeichner);
    
$query = "SELECT * FROM $datei WHERE $bezeichner='$wert'";
    echo "<p style='color:red'>$query</p>"; // Kontrollausgabe
    mysql_connect($host,$user,$password);
    mysql_select_db($database);
    $result = mysql_query($query);
    while($row = mysql_fetch_row($result)) {
        for ($i=0; $i<count($row); $i++) {
            echo $row[$i] . " ";
        }
        echo "<br/>";
    }
}

?>

Alternativ: Abfrage für Anfänger

An die QBE-Abfragen erinnert das folgende HTML-Formular:

<?php
    echo "<p style='color:red'>"; print_r($_POST); echo "</p>"; // Kontrollausgabe
?>


<form action="anfrage4.php" method="POST">
    <select name="datei" size="1">
        <option>buch</option>
        <option>leiht</option>
        <option>leser</option>
    </select>
    .
    <select name="bezeichner" size="1">
        <option>BuchNr</option>
        <option>BuchAutor</option>
        <option>BuchTitel</option>
        <option>BuchPreis</option>
        <option>LeserNummer</option>
        <option>LeserName</option>
        <option>LeserAlter</option>
        <option>LeserGeschlecht</option>
        <option>LeserBetreuer</option>
        <option>Datum</option>
    </select>  
    <select name="operator" size="1">
        <option><</option>
        <option>=</option>
        <option>></option>
    </select>
    <input type="text" size="10" name="wert">
    <input type="submit" value="Anfrage">
</form>


<?php

$host     = "localhost";
$database = "bibliothek";
$user     = "gast";
$password = "xgast";

if (
$_POST["wert"] != "") {
    // erwartet eine query der Form leser.name:erna
    
$query = "SELECT * FROM " . $_POST["datei"] .
    
         " WHERE " . $_POST["bezeichner"] .
    
         $_POST["operator"] . "'" . $_POST["wert"] . "'";
    echo "<p style='color:red'>$query</p>"; // Kontrollausgabe
    mysql_connect($host,$user,$password);
    mysql_select_db($database);
    $result = mysql_query($query);
    while($row = mysql_fetch_row($result)) {
        for ($i=0; $i<count($row); $i++) {
            echo $row[$i] . " ";
        }
        echo "<br/>";
    }
}

?>