Ich habe 2 Datenbankfelder
`decval` decimal(5,2)
`intval` int(3)
Ich habe 2 PDO-Abfragen, die sie aktualisieren. Derjenige, der das int aktualisiert, funktioniert in Ordnung
$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT);
Ich kann das Dezimalfeld jedoch nicht aktualisieren. Ich habe die folgenden 3 Möglichkeiten ausprobiert, aber nichts funktioniert
$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR);
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT);
$update_decval->bindParam(':decval', $decval);
Es scheint, dass das Problem mit dem Datenbanktyp ist decimal
? Gibt es ein PDO::PARAM
für ein Typfeld decimal
? Wenn nicht, was verwende ich als Problemumgehung?
Antworten:
Es gibt keine
PDO::PARAM
für Dezimalstellen / Gleitkommazahlen, die Sie verwenden müssenPDO::PARAM_STR
.quelle
'1.0'
anstelle von1.0
) oder verwenden Siestrval($decval)
.PDO::PARAM_STR
ist die Standardeinstellung, wenn keine angegeben ist), und Sie sollten Ihren Spaltendatentyp nicht ändern. Schließen Sie den Wert einfach in einfache oder doppelte Anführungszeichen oderstrval()
wie folgt ein :$update_decval->bindParam(':decval', strval($decval), PDO::PARAM_STR);
.strval
nicht funktioniert. Es klingt nach einer sehr logischen Antwort, aber dort funktioniert etwas nicht. Ich versuche verschiedene Kombinationen, um zu sehen, ob eine davon funktionieren würde.bindValue()
stattdessen verwenden, wenn Sie verwenden möchtenstrval()
.UP muss das gleiche PDO :: PARAM_STR verwenden. Wenn die Spalte in der Datenbank vom Typ NUMERIC (M, D) oder dezimal (M, D) ist, sollte beachtet werden, dass M die Anzahl der Zeichen ist Gesamtzahl der Zeichen, die Sie eingeben können, und D die Anzahl der Dezimalstellen. Im Beispiel NUMERIC (10,2) haben wir 8 Häuser zu Genauigkeitsstellen und zwei Dezimalstellen. Wir haben also insgesamt 10 Zeichen, wobei 2 für Dezimalstellen reserviert sind.
quelle
Ich habe eine Lösung gefunden, sende den Dezimalparameter wie PDO :: PARAM_STR, empfange ihn in der SQL Server-Speicherprozedur wie Dezimal (int, dec)
PHP
$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);
SQL Server, Speicherverfahren:
@valor_escala_desde decimal(18,2),
und ist fertig.
quelle
Verwenden Sie PDO :: PARAM_STR für alle Spaltentypen, die nicht vom Typ int oder Bool sind
quelle