select count(*) ohne while

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Loddar1

Erfahrenes Mitglied
Hallo und Guten Tag
ich habe da eine Frage, select soll zählen und ich habe auch Code:

Der alte Code:
PHP:
$pmznew = mysql_result(mysql_query("SELECT COUNT(*) FROM locpm WHERE datum >='$date' AND readed='0'"),0);

und hier mein neuer Code:
PHP:
$stmt = $con->prepare("SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?");
$dadum = IntVal($date);
$datum = $con->real_escape_string ($dadum);
$ana = IntVal($_SESSION['id']);
$an = $con->real_escape_string ($ana);
$stmt->bind_param('ii', $datum,$an);
$stmt->execute();
$pmz = null;
$stmt->bind_result($pmz);
while ($stmt->fetch()){ ... }

jetzt möchte ich diesen Code ohne while schleife ausgeben,
aber hier ist Ebbe in meinem Kopf.

Hat einer von euch einen Tip wie ich das ohne while schleife hinbekomme?

Mein ansatz ist $pmz = $stmt->fetch();
aber so funktioniert es nicht.
 

basti1012

Erfahrenes Mitglied
Was möchtest du zählen ?
Die Anzahl an Datensätzen die dir
SQL:
"SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?"
Ausgibt oder wie?

Du nutzt doch schon Count
Das ist nicht so mein Thema, aber es gebe jetzt 2 Möglichkeiten.
Die erste Möglichkeit
Dies verursacht natürlich deutlich weniger Traffic zwischen dem MySQL-Server und dem Webserver
PHP:
$stmt = $con->prepare("SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?");
$stmt->execute();
$row = $stmt->fetch();
echo "Es wurden ".$row['anzahl']." User gefunden";
Die zweite möglichkeit
PHP:
$stmt = $con->prepare("SELECT * FROM locpm WHERE datum >=? AND an=?");
$stmt->execute();
$rowCount = $stmt->rowCount();
echo "Es wurden $rowCount User gefunden";
ungetesteter Code

Nochwas.
Ich behaupte mal das dies hier nicht funktioniert
PHP:
$an = $con->real_escape_string ($ana);
bzw. nicht gebraucht wird.

Wie gesagt , bin mit pdo ,prepare nicht so fit.
Wenn ich falsch liege wird das hoffentlich einer sagen
 
Zuletzt bearbeitet:

basti1012

Erfahrenes Mitglied
Never ever! Wieso willst du alle Datensätze selektieren, wenn du nur die Anzahl wissen willst?

Und wo soll $row['anzahl'] herkommen?
Stimmt ich blöd
PHP:
$stmt = $con->prepare("SELECT COUNT(*) AS anzahl FROM locpm WHERE datum >=? AND an=?");
$stmt->execute();
$row = $stmt->fetch();
echo "Es wurden ".$row['anzahl']." User gefunden";
So ist richtig, oder ?

Die zweite möglich hat nur sinn wenn man mit den Daten dahinter noch was machen will.
Wenn es nur die Anzahl sein soll dann natürlich die erste Wahl mit COUNT.

Und wenn wir schon dabei sind.
Nutze niemals SELECT *
Schreibe alle Spaltennamen auf, die du gerade brauchst, auch wenn es alle sind.
Warum man kein SELECT * FROM ... verwenden sollte
 
Zuletzt bearbeitet:

Loddar1

Erfahrenes Mitglied
Habe mal weiter probiert und was gefunden:
PHP:
$stmt = $con->prepare("SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?");
$stmt->bind_param('ii', $date,$_SESSION['id']);
$stmt->execute();
$rowa = $stmt->get_result()->fetch_row();
$pmz = $rowa[0];
scheint zu funktionieren.
 

basti1012

Erfahrenes Mitglied
Habe mal weiter probiert und was gefunden:
PHP:
$stmt = $con->prepare("SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?");
$stmt->bind_param('ii', $date,$_SESSION['id']);
$stmt->execute();
$rowa = $stmt->get_result()->fetch_row();
$pmz = $rowa[0];
scheint zu funktionieren.
Ja das scheint richtig zu sein.
Ich habe gestern PDO und MYSQLi prepared statements vertauscht.
Das vertausche ich ständig.
Deswegen habe ich die bis jetzt auch nicht mehr genutzt.

Jetzt muss ich auch mal Frage an die Profis stellen, ob die 3 Varianten so jetzt richtig sind.

1. COUNT mit PDO
PHP:
$pdo = new PDO('mysql:host=localhost;dbname=***','***', '***');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$statement = $pdo->prepare("SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?");
$statement->execute(array($date,$_SESSION['id']));
$row = $statement->fetch();
echo "COUNT ".$row[0];


2.COUNt mit MYSQLI und prepared statements
PHP:
$con= new mysqli("localhost", "***", "***", "***");
$stmt = $con->prepare("SELECT COUNT(*) FROM locpm WHERE datum >=? AND an=?");
$stmt->bind_param('ii', $date,$_SESSION['id']);
$stmt->execute();
$rowa = $stmt->get_result()->fetch_row();
echo "COUNT ".$rowa[0];


3.MYSQLI mit COUNT
PHP:
$mysqli=mysqli_connect("localhost", "***", "***", "***");
$id=mysqli_real_escape_string($mysqli,$_SESSION['id']);
$date=mysqli_real_escape_string($mysqli,$date);
$query="SELECT COUNT(*) FROM `locpm` WHERE `datum`>='$date' AND `an`='$id'";
$result = mysqli_query($mysqli, $query);
if($result){
    $anz=mysqli_fetch_row($result);
    echo "COUNT ".$anz[0];
}
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
Oder der ANsatz von Loddat1 im ersten thread mit bind_result()
PHP:
$stmt->execute();
$stmt->bind_result($pmz);
$stmt->fetch();
echo $pmz;
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…