Hole double aus einer Datenbank, Datentyp ist aber string
Ingo
- php
Hallo,
ich hole mehrere Zahlen aus einer Datenbank, die vom Datentyp double sind.
Nach ein paar gescheiterten Versuchen mit den Zahlen was vernünftiges anzustellen habe ich mir mal mittels gettype den Datentyp der Variablen ausgeben lassen.
Zurückgegeben wurde mir immer der Datentyp string .
Woran kann das liegen ?
Hier meine Abfrage:
$stmt="select * from lalala ";
if(!$result=mysql_db_query($db, $stmt)) echo "Fehler" . $stmt . "<br>";
while($row = mysql_fetch_array($result)) {
extract($row);
$lala1 = gettype($row["wert1"]);
echo "$lala1";
echo "<br>";
$lala2 = gettype($row["wert2"]);
echo "$lala2";
echo "<br>";
$lala3 = gettype($row["wert3"]);
echo "$lala3";
echo "<br>";
}
mfg
Ingo
Moin!
ich hole mehrere Zahlen aus einer Datenbank, die vom Datentyp double sind.
Nach ein paar gescheiterten Versuchen mit den Zahlen was vernünftiges anzustellen habe ich mir mal mittels gettype den Datentyp der Variablen ausgeben lassen.
Zurückgegeben wurde mir immer der Datentyp string .
Woran kann das liegen ?
Wie kommen die Zahlen denn in die Datenbank hinein?
Wenn du es genau betrachtest, dann wirst du feststellen, dass üblicherweise ein SQL-String mit dem INSERT- oder UPDATE-Kommando verwendet wird. Ein _STRING_, kein SQL-double und auch kein SQL-integer.
So ist es also nur folgerichtig, wenn auch nur ein String herauskommt, wenn man die Datenbank wieder abfragt.
Das ist aber in der Regel kein Problem. PHP wandelt die Variablentypen (manch sagen: leider) automatisch um, wenn andere als der aktuelle Typ benötigt werden. Wenn du also den String aus der Datenbank, der ein double sein sollte, mit einer Zahl verrechnest ($dbwert = $dbwert + 1), dann wird vorher der Datentyp umgewandelt, und das Ergebnis ist ein Zahlendatentyp.
Jetzt könnte man argumentieren: Die Datenbank hat doch intern nicht umsonst Typen für die Spalten gesagt bekommen, warum zum Teufel kann sie dann nicht die richtigen Datentypen zurückgeben? Den Typ weiß sie doch schließlich schon.
Antwort von Radio Eriwan: Im Prinzip ja - wenn da nicht die vielen verschiedenen Systeme wären, die theoretisch auf eine Datenbank zugreifen können. Es gibt in der Computerwelt vermutlich hundert verschiedene Zahlendatentypen, und die interne Darstellung dieser Datentypen variiert obendrein nochmal, je nachdem, welcher Prozessor verwendet wird. Es ist also reichlich unmöglich, für alle passenden Client-Datentypen ein passende Interface bereitzuhalten. Insbesondere kann die Datenbank unmöglich alle Client-Datentypen verwalten. Es kommt dabei unweigerlich zu Reibungsverlusten.
Der einfachste Ausweg ist daher, die Zahl als String zu übergeben. Dann kann jedes System die Zahl "interpretieren" und nach besten Möglichkeiten intern weiterverarbeiten.
- Sven Rautenberg