2010-04-27 3 views
62

Ho 2 campi del databasePDO: PARAM per tipo decimale?

`decval` decimal(5,2) 
`intval` int(3) 

ho 2 domande DOP che li aggiornano. Quello che aggiorna l'int funziona ok

$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT); 

ma non riesco ad aggiornare il campo decimale. Ho provato i 3 modi di seguito, ma non funziona niente

$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR); 
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT); 
$update_decval->bindParam(':decval', $decval); 

Sembra che il problema è con il tipo di database decimal? Esiste un PDO::PARAM per un campo di tipo decimal? In caso contrario, cosa utilizzo come soluzione alternativa?

+0

si prega di inviare la richiesta la vostra preparazione – Galen

+0

possibile duplicato di http://stackoverflow.com/questions/1335081/che-è-il-best-way-to-bind-decimal-double-float-values-with-pdo -in-php –

risposta

61

Non c'è alcun PDO::PARAM per decimali/float, è necessario utilizzare PDO::PARAM_STR.

+2

Questa è una delle cose che ho provato e non ha funzionato prima di postare la domanda qui. – dmontain

+0

@dmontain: prova a definire $ decval come stringa (es .: ''1.0'' anziché' 1.0') o usa 'strval ($ decval)'. –

+5

@dmontain: dovrebbe funzionare immediatamente ('PDO :: PARAM_STR' è il valore predefinito quando nessuno è specificato), e ** non dovresti ** modificare il tipo di dati della colonna. Basta racchiudere il valore con virgolette singole o doppie o 'strval()', come questo: '$ update_decval-> bindParam (': decval', strval ($ decval), PDO :: PARAM_STR);'. –

0

Ho scoperto, cercando un modo per memorizzare DOULBE usando PDO, che se non si fornisce il terzo argomento (cioè PDO :: PARAM_ *) utilizza un qualche tipo di magia e memorizza correttamente il numero. Quindi forse se hai appena lasciato PDO per preoccuparti del tipo di parametro e associare allegramente: decval a $ decval e vai al prossimo task :-))

+7

Questo non è un tipo di magia, ma è l'impostazione predefinita per trattare il parametro come una stringa, come nella risposta accettata. – PeerBr

0

UP deve usare lo stesso PDO :: PARAM_STR e notare che se la colonna nel database è di tipo NUMERIC (M, D) o decimale (M, D) si dovrebbe osservare che M è il numero di caratteri che la precisione dovrebbe essere il numero totale di caratteri che è possibile inserire, e D il numero di caratteri decimali. Nell'esempio NUMERICO (10,2) abbiamo 8 case in luoghi di precisione e due posizioni decimali. Quindi abbiamo 10 caratteri in totale con 2 riservati per i decimali.

0

ho trovato una soluzione, inviare il parametro decimale come DOP :: PARAM_STR, nella procedura di negozio SQL server riceverlo come decimale (int, dec)

PHP

$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR); 

SQL SERVER, NEGOZIO PROCEDURA:

@valor_escala_desde decimal(18,2), 

ed è fatto.