Hi,
was steht in db_connect.php ?
Was steht in db_disconnect.php?
das ist die Verbindung zur DB sowie die Trennung dieser Verbindung. In der 'db_connect.php' steht:
<?php
$db=@new mysqli('Hostname','Benutzername','Benutzerkennwort','Datenbankname');
$db->set_charset('utf8');
if (mysqli_connect_errno())
{
die("<h1>Datenbank Verbindungsfehler</h1><p>Bitte entschuldigen Sie, es kann momentan keine Verbindung zur Datenbank aufgebaut werden</p><p>".mysqli_connect_error()."(".mysqli_connect_errno().")</p><p>Wenn dieses Problem weiterhin besteht, melden Sie das bitte per Mail an <a href=\"mailto:admin@example.net\">admin@example.net</a>.</p>");
}
?>
In der 'db_disconnect.php' steht:
<?php
$db->close();
?>
Außerdem ist es nicht der Code, den ich Dir gepostet hatte.
Stimmt, da hatte ich etwas übersehen.
<?php
include('db_connect.php');
$statement='SELECT COUNT(*) anzahl
FROM 11\_dbtest
WHERE vorname
="Hans"';
$result = $db->query($statement);
$_row = $result->fetch_assoc();
include('db_disconnect.php');
echo "<p>Insgesamt befinden sich {$_row['anzahl']} Datensätze in der Datenbank.</p>\n";
?>
Verstehe ich das richtig, Du gibst diesem Zählvorgang einen Namen? In dem Fall heißt der Zählvorgang also "anzahl"? Das verwirrt mich insofern, als ich auf sämtlichen themenspezifischen Seiten, die ich bisher vor mir hatte, dies nicht vorkommt. Siehe zB. das Kapitel "Zeilen zählen" im SQL Handbuch.
Wenn ich den von Dir vorgeschlagenen Code verwende, 1:1 kopiert, funktioniert es, die richtige Anzahl der betroffenen Datensätze wird ausgegeben. Nur - wie schon gesagt - ich finde nirgendwo eine Erklärung zu der Sache mit der Namensgebung für die Zählung.
Im PHP Handbuch habe ich beim Herumsuchen zufällig das Kapitel "mysqli rollback" (Was immer das auch ist) gefunden und dort ist mir bei den Beispielen Folgendes ins Auge gefallen:
$mysqli->rollback();
if ($result = $mysqli->query("SELECT COUNT(*) FROM myCity"))
{
$row = $result->fetch_row();
printf("%d rows in table myCity (after rollback).\n", $row[0]);
$result->close();
}
Das hat mir den Denkanstoß gegeben, meinen Code umzuschreiben und weiter zu vereinfachen. Ich habe jetzt, um mein Ziel zu erreichen, folgenden Code:
<?php
include('db_connect.php');
$result=$db->query("SELECT COUNT(*) FROM `11_dbtest` WHERE `vorname`='Hans'");
$row = $result->fetch_row();
include('db_disconnect.php');
echo "<p>Insgesamt befinden sich $row[0] Datensätze in der Datenbank.</p>\n";
?>
Das funktioniert wunderbar. Nachdem ich aber auch lernen und verstehen möchte, was ich hier tue, bitte ich trotzdem um ein paar Erklärungen. Wieso hat in Deinem Beispiel die Zählung einen Namen, während das in meiner aktuellen Lösung nicht der Fall ist? Du arbeitest mit "$_row= $result->fetch_assoc()" während bei mir jetzt ein "$row=$result->fetch_row()" verwendet wird. Was ist da der Unterschied? Gibt es da Vorteile/Nachteile? Und natürlich: Ist meine aktuelle Lösung so OK?
Was ich jetzt verstanden habe ist das Prinzip, dass der Server so oder so alle Datensätze durchgehen muß, um zu einem Zählergebnis zu kommen, dass es aber einfacher ist, wenn er diese Zahl dem Client schickt, statt alle gefundenen Datensätze, damit diese vom Client ein 2. mal gezählt werden müssen. Und genau dafür gibt es COUNT. Richtig??
Nicht richtig klar ist mir hingegen der Hinweis von dedlfix.
COUNT() ist eine Funktion. Ob man da * oder einen Spaltennamen angibt, kann das Ergebnis beeinflussen. Bei * werden alle Datensätze gezählt, bei einem Spaltennamen nur die Datensätze, die keinen NULL-Wert in der Spalte haben. Auf alle Fälle braucht es da aber die Klammern.
Ich finde leider nirgendwo eine Seite, wo das erklärt wird. Ich finde bei allen Beispielen eigentlich immer nur einen Code mit einem COUNT(*).
Naja, zumindest bin ich einen kleinen Schritt weiter dank Eurer Hilfe.
MfG
Onkel Hans