Hi dedlfix,
Der Aufbewahrungsort gehört selbstverständlich mit in die Liste der zu beachtenden Dinge. Es nützt dir ja nichts, wenn du zwar einen Kubikmeter problemlos transportieren kannst, aber nur eine Streichholzschachtel zum Aufbewahren breithältst.
Das heißt? Also muß ich _was_ noch zusätzlich tun, was bisher nicht aufgezählt worden ist?
Nein, warum denn das? Du kannst mit mysqli alles machen, was auch mit mysql geht (und darüber hinaus noch mehr).
Also ich kenne mysqli erst seit wenigen Tagen, habe aber schon intensive Suche nach Tutorials und Beispielseiten gesucht. Bisher habe ich _ausschließlich_ die Verwendung beim Einfügen eines neuen Datensatzes und beim Auslesen gefunden. Die 2 bisher besten Seiten, die ich gefunden habe, sind die Einführung in die MySQLi-Erweiterung von PHP 5 auf phpbuddy.eu und das Tutorial Einführung in die MySQLi-Erweiterung von PHP 5 auf traum-projekt.com.
Vor kurzem hat mir hier ChrisB erklärt:
Wenn du mit mysqli_query eine Query an die Datenbank absetzt, dann machst du das nach wie vor so:
mysql_query("SELECT ... FROM WHERE xyz = '".$variable."'");
Ich dachte, die Betonung lag da auf "nach wie vor" und habe, da ich eben für das Löschen bzw. Ändern von schon bestehenden Datensätzen mittels mysqli _nichts_ gefunden habe, angenommen, dies bedeutet, ich kann nicht _ganz_ auf die bisherigen Befehle und Schreibweisen verzichten.
Es tut mir leid, aber das muß ich jetzt hinterfragen. Nicht, daß ich da von Anfang an was falsch lerne oder verstehe. Also nehmen wir folgende, ganz einfache Situation an:
Ich habe eine Datenbank mit der Hostadresse "mysql4.example.com", die Datenbank hat den Namen "db123456", mein Username ist ebenfalls "db123456" und mein Passwort lautet "beispielpass".
In dieser DB habe ich jetzt eine Tabelle mit dem Namen "tabelle1" angelegt. Diese Tabelle hat die Felder "id"[Typ:int(5), Null:NEIN, Extra:auto_increment sowie Primärschlüssel], "name"[Typ:varchar(50), Null:JA, Standard:NULL], "ort"[Typ:varchar(50), Null:JA, Standard:NULL], und "geburtsjahr"[Typ:int(4), Null:JA, Standard:NULL].
Ich nehme weiter an, daß ich Namen, Ort und Geburtsjahr aus einem Formular übernehme und weiterverarbeite. (Stichwort:kontextbezogene Behandlung)
Als letztens im Forum jemand nach einer Kurzzusammenfassung von SQL-Befehlen gefragt hat, hast Du (logischerweise) geantwortet:
Die wichtigsten SQL-Anweisungen sind SELECT, INSERT, UPDATE und DELETE. Alles andere ist praktisch systemabhängig.
OK, also die 4 wichtigsten Aktionen sind: 1) Einen neuen Datensatz hinzufügen, 2) Datensätze ausgeben. 3) Einen bestehenden Datensatz ändern und 4) einen bestehenden Datensatz löschen.
Ich bleibe jetzt bei oben stehenden fiktiven Angaben und zeige Dir mal, wie ich 1) und 2) mit mysqli löse:
- Einen neuen Datensatz hinzufügen mit mysqli:
<?php
$db = new MySQLi('mysql4.example.com', 'db123456', 'beispielpass', 'db123456');
if(mysqli_connect_errno())
{
die("Es konnte keine Verbindung zur Datenbank aufgebaut werden: ".mysqli_connect_error()."(".mysqli_connect_errno().")");
}
$db->set_charset("utf8");
$sql = 'INSERT INTO `tabelle1` (`name`, `ort`, `geburtsjahr`) VALUES (?, ?, ?)';
$kommando = $db->prepare($sql);
$kommando->bind_param('ssi', $_POST['name'], $_POST['ort'], $_POST['geburtsjahr']);
$kommando->execute();
$db->close();
?>
- Alle Datensätze der Tabelle ausgeben mit mysqli:
<?php
$db = new MySQLi('mysql4.example.com', 'db123456', 'beispielpass', 'db123456');
if(mysqli_connect_errno())
{
die("Es konnte keine Verbindung zur Datenbank aufgebaut werden: ".mysqli_connect_error()."(".mysqli_connect_errno().")");
}
$sql = 'SELECT `id`, `name`, `ort`, `geburtsjahr` FROM `tabelle1` ORDER BY `id`';
$ergebnis = $db->prepare( $sql );
$ergebnis->execute();
$ergebnis->bind_result( $id, $name, $stadt, $geburtsjahr );
while ($ergebnis->fetch())
{
echo "<p>".htmlspecialchars(stripslashes($id))." ==> ".htmlspecialchars(stripslashes($name))." aus ".htmlspecialchars(stripslashes($ort))." ist ".htmlspecialchars(stripslashes($geburtsjahr))."geboren.</p>\n";
}
$db->close();
?>
Anmerkung: Hier habe ich das "$db->set_charset("utf8");
" _absichtlich_ weggelassen, weil es ja nur der Ausgabebefehl ist, ohne Daten in einer WHERE Klausel. Ist das eh OK so?
2B) Ausgabe von Datensätzen unter einer Bedingung mit mysqli:
<?php
$db = new MySQLi('mysql4.example.com', 'db123456', 'beispielpass', 'db123456');
if(mysqli_connect_errno())
{
die("Es konnte keine Verbindung zur Datenbank aufgebaut werden: ".mysqli_connect_error()."(".mysqli_connect_errno().")");
}
$db->set_charset("utf8");
$sql = 'SELECT `id`, `name`, `ort`, `geburtsjahr` FROM `tabelle1` WHERE `ort`=`'.$_POST['ortsuche'].'` ORDER BY `id`';
$ergebnis = $db->prepare( $sql );
$ergebnis->execute();
$ergebnis->bind_result( $id, $name, $stadt, $geburtsjahr );
while ($ergebnis->fetch())
{
echo "<p>".htmlspecialchars(stripslashes($id))." ==> ".htmlspecialchars(stripslashes($name))." aus ".htmlspecialchars(stripslashes($ort))." ist ".htmlspecialchars(stripslashes($geburtsjahr))."geboren.</p>\n";
}
$db->close();
?>
Zwischenfrage: Ist der WHERE-Teil mit den Anführungszeichen und dem Verkettungsoperatoren richtig so?
So, aber das war das Ende meiner Weisheit. Wie man 3) einen bestehenden Datensatz ändern und 4) einen bestehenden Datensatz löschen kann (_mit mysqli_), weiß ich nichts und finde dazu auch nichts im Netz. Für diese 2 Aufgaben finde ich nur die althergebrachte, herkömmliche Methode.
Ich bitte um Nachhilfeunterricht. :-)
MfG
Der Brombeermilchtrinker