filament
Erfahrenes Mitglied
Hallo Leute,
ich versuche gerade ein Projekt von mir auf PHP7 umzustellen und musste mich daher mit MySQLi beschäftigen. Habe ich heute auch etwas intensiver gemacht. Allerdings blicke ich einige Sachen noch nicht so genau und möchte daher mal nachfragen.
Bereits verstanden habe ich, dass es einen objektorientieren Stil und einen prozeduralen Stil gibt. Ich würde gern den objektorientierten Stil nutzen. Was ich bisher verstanden habe:
Verbindung herstellen, ist wohl selbsterklärend:
Ganz gewohnt kann ich nun den entsprechenden Query festlegen:
Hier aber bereits die erste Ungeklärtheit (für mich zumindest). Wann nutze ich Fragezeichen und wann nicht? Ich habe SELECT Parameter gesehen wo steht WHERE id > 500, aber auch solche wo steht WHERE id > ? Was ist nun richtig?
Nach dem Query mache ich dann das Prepared Statement und binde die Parameter bzw. führe es aus:
Als nächstes hole ich mir dann das Ergebnis wie gewohnt auch aus MySQL
Hier schon wieder die nächste Frage. Kann ich nun die oben gebundenen Variablen dafür nutzen? Sprich $name, $vorname in meinem Fall. Oder muss ich hier wieder mit $row->spalte arbeiten?
Danach dann logischerweise:
Was ich auch nicht verstanden habe ist warum ich eine Variable für das Statement habe ($stmt in meinem Beispiel)? Das scheint so wie ich es rauslesen konnte eine Sicherheitsabfrage zu sein, damit keine SQL Injections durchgeführt werden können.
Vielleicht könnte da Jemand etwas Licht ins Dunkle bringen.
Wie ist denn die gängige Vorgangsweise beim objektorientierten Stil, welche immer wieder folgt?
Nun habe ich auch gleich noch ein Beispiel mit einer doppelten Abfrage. Ich möchte News auslesen und mittels der ausgelesenen ID dann die Anzahl der Kommentare die in einer anderen Tabelle gespeichert sind. Früher konnte man hier die SQL Queries ineinander verschachteln und mittels der ausgelesenen News ID dann in der Kommentarfunktion einfach die Anzahl der Datensätze auslesen ganz kurz mit num_rows.
Wie ich gelesen habe, kann man in MySQLi nun Multi Queries nutzen und somit mit $query und $query. zwei Datenbankabfragen gleichzeitig abarbeiten. Mir ist nun aber nicht ganz bewusst wie das aussehen soll.
Was ich verstanden habe ist folgendes:
Datenbankabfrage ganz normal, dann Query wie eben beschrieben mit und einer do while Schleife.
Aber was genau mach ich in der If Abfrage vom more_results ????
Dann noch eine generelle Frage:
Sollte ich noch wie früher die Abfrage nach den Datensätzen machen? Oder ist das mit if ($result = $db->query($query)) schon getan????
Vielen Dank im Voraus für Hilfe!
ich versuche gerade ein Projekt von mir auf PHP7 umzustellen und musste mich daher mit MySQLi beschäftigen. Habe ich heute auch etwas intensiver gemacht. Allerdings blicke ich einige Sachen noch nicht so genau und möchte daher mal nachfragen.
Bereits verstanden habe ich, dass es einen objektorientieren Stil und einen prozeduralen Stil gibt. Ich würde gern den objektorientierten Stil nutzen. Was ich bisher verstanden habe:
Verbindung herstellen, ist wohl selbsterklärend:
PHP:
$db = new mysqli($server, $user, $passwort, $datenbank);
/* Check Connection */
if (mysqli_connect_errno())
{
printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
exit();
}
Ganz gewohnt kann ich nun den entsprechenden Query festlegen:
PHP:
$query = 'SELECT * FROM tabelle WHERE ...';
$query = 'INSERT INTO tabelle (name, vorname) VALUES (?, ?)';
Hier aber bereits die erste Ungeklärtheit (für mich zumindest). Wann nutze ich Fragezeichen und wann nicht? Ich habe SELECT Parameter gesehen wo steht WHERE id > 500, aber auch solche wo steht WHERE id > ? Was ist nun richtig?
Nach dem Query mache ich dann das Prepared Statement und binde die Parameter bzw. führe es aus:
PHP:
if ($stmt = $db->prepare($query))
{
$stmt = $db->prepare($query);
$stmt->bind_param('i', $name, $vorname);
$stmt->execute();
Als nächstes hole ich mir dann das Ergebnis wie gewohnt auch aus MySQL
PHP:
$result = $stmt -> get_result();
while ($row = $result -> fetch_object())
{
mache etwas
}
Hier schon wieder die nächste Frage. Kann ich nun die oben gebundenen Variablen dafür nutzen? Sprich $name, $vorname in meinem Fall. Oder muss ich hier wieder mit $row->spalte arbeiten?
Danach dann logischerweise:
PHP:
$stmt->close();
}
$db->close();
Was ich auch nicht verstanden habe ist warum ich eine Variable für das Statement habe ($stmt in meinem Beispiel)? Das scheint so wie ich es rauslesen konnte eine Sicherheitsabfrage zu sein, damit keine SQL Injections durchgeführt werden können.
Vielleicht könnte da Jemand etwas Licht ins Dunkle bringen.
Wie ist denn die gängige Vorgangsweise beim objektorientierten Stil, welche immer wieder folgt?
Nun habe ich auch gleich noch ein Beispiel mit einer doppelten Abfrage. Ich möchte News auslesen und mittels der ausgelesenen ID dann die Anzahl der Kommentare die in einer anderen Tabelle gespeichert sind. Früher konnte man hier die SQL Queries ineinander verschachteln und mittels der ausgelesenen News ID dann in der Kommentarfunktion einfach die Anzahl der Datensätze auslesen ganz kurz mit num_rows.
Wie ich gelesen habe, kann man in MySQLi nun Multi Queries nutzen und somit mit $query und $query. zwei Datenbankabfragen gleichzeitig abarbeiten. Mir ist nun aber nicht ganz bewusst wie das aussehen soll.
Was ich verstanden habe ist folgendes:
Datenbankabfrage ganz normal, dann Query wie eben beschrieben mit und einer do while Schleife.
PHP:
$query = '...........................';';
$query. = '..........................';
if ($db->multi_query($query))
{
do
{
if ($result = $db->store_result())
{
while ($row = $result->fetch_object())
{
Ausgabe
}
}
if ($db->more_results())
{
...
}
}
while ($db->next_result());
}
Aber was genau mach ich in der If Abfrage vom more_results ????
Dann noch eine generelle Frage:
Sollte ich noch wie früher die Abfrage nach den Datensätzen machen? Oder ist das mit if ($result = $db->query($query)) schon getan????
Vielen Dank im Voraus für Hilfe!