PHP: Wie kann ich Werte bei einer while-Schleife mit Datenbank addieren?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Addiere es doch direkt in der Datenbank, das spart auch Performance:

$query="SELECT *, (clicks + clicks_mobile) AS clicks_gesamt FROM Datenbank WHERE userid = " . $id . "";

Ausgeben kannst Du das dann per

$row["clicks_gesamt"]

Beachte, dass Du auch auf das Auslesen per "*" im SELECT-Statement verzichten solltest. Gib konkret die Spalten an die Du auslesen willst. Das bringt ebenfalls etwas Performance, vor allem bei großen Tabellen und Statements.

Woher ich das weiß:Berufserfahrung
$row['clicks']."+".$row['clicks_mobile']

Sollte das nicht eher

intval(.$row['clicks']) + intval(.$row['clicks_mobile'])

heißen?

intval(), da ich denke, dass der Rückgabewert ein String ist und keine Zahl und normalerweise bei dem Addition Operator bei einem String einfach der String hinten dran gehangen wird.

TimMagFussball 
Fragesteller
 01.07.2018, 16:00

ne ist int

0
Xearox  01.07.2018, 16:03
@TimMagFussball

Es geht um den Rückgabe Wert von fetch_assoc(). Ich weiß nicht, in welchem Datenformat es gespeichert ist.

Edit:

Returns an associative array of strings representing the fetched row in the result set, where each key in the array represents the name of one of the result set's columns or NULL if there are no more rows in resultset.

So stehts im MySQL Doc drin, daher gehe ich davon aus, dass alle Werte in dem Array Strings sind und entsprechend noch in den entsprechenden Datentyp geparsed werden.

http://php.net/manual/de/mysqli-result.fetch-assoc.php

0
verreisterNutzer  01.07.2018, 19:29
@TimMagFussball

Doch, du kriegst nur Strings aus der Datenbank. Die Werte ins Programm übernehmen, in Integer umwandeln und dann kansnt du diese addieren

0

1) Nutze Prepared Statements.

2) Aus der Dokumentation:

Returns an associative array of strings representing the fetched row in the result set, (...)

Zudem packst du das Pluszeichen ja auch noch in einen String und konkatenierst. Also:

$clicks = intval($row['clicks']) + intval($row['clicks_mobile']);
/* ... */ insgesamt $clicks /* ... */

3) Wieso setzt du printf ein, nutzt diese Funktion aber nicht richtig? Lies auch hier die Dokumentation genauer.

printf("%s normale Aufrufe, %s von mobile. Insgesamt %d <br><br>", $row['clicks'], $row['clicks_mobile'], $clicks);