2010-04-27 81 views
62

tengo 2 campos de la basePDO :: PARAM para tipo decimal?

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

tengo 2 preguntas que les pdo actualización. El que actualiza el int funciona bien

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

pero no puedo actualizar el campo decimal. He tratado de las 3 formas de abajo, pero nada funciona

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

Parece que el problema es con el tipo de base de datos decimal? ¿Hay un PDO::PARAM para un campo de tipo decimal? Si no, ¿qué uso como solución alternativa?

+0

por favor publique la consulta su preparación – Galen

+0

posible duplicado de http://stackoverflow.com/questions/1335081/what-is-the-best-way-to-bind-decimal-double-float-values-with-pdo -en-php –

Respuesta

61

No hay ningún PDO::PARAM para decimales/flotadores, tendrá que usar PDO::PARAM_STR.

+2

Esa fue una de las cosas que probé y no funcionó antes de publicar la pregunta aquí. – dmontain

+0

@dmontain: Intente definir $ decval como una cadena (ej .: ''1.0'' en vez de' 1.0') o use 'strval ($ decval)'. –

+5

@dmontain: Debería funcionar de fábrica ('PDO :: PARAM_STR' es el valor predeterminado cuando no se especifica ninguno), y ** no debe ** cambiar el tipo de datos de la columna. Simplemente encierre el valor con comillas simples o dobles o 'strval()', de esta manera: '$ update_decval-> bindParam (': decval', strval ($ decval), PDO :: PARAM_STR);'. –

0

Me enteré, buscando una forma de almacenar DOULBE utilizando PDO, que si no proporciona el tercer argumento (es decir, PDO :: PARAM_ *) utiliza algún tipo de magia y almacena el número correctamente. Entonces, si deja PDO para preocuparse por el tipo de parámetro y se une alegremente: decval a $ decval y avance a la siguiente tarea :-))

+7

Esto no es un tipo de magia, sino que trata de manera predeterminada el parámetro como una cadena, como en la respuesta aceptada. – PeerBr

0

UP debe usar el mismo PDO :: PARAM_STR, y debe tener en cuenta si la columna en la base de datos es de tipo NUMÉRICO (M, D) o decimal (M, D) se debe observar que la M es el número de caracteres, la precisión debe ser el total de caracteres que puede ingresar, y D el número de lugares decimales. En el ejemplo NUMÉRICO (10,2) tenemos 8 casas en lugares de precisión y dos decimales. Entonces tenemos 10 caracteres en total con 2 reservados para decimales.

0

he encontrado una solución, enviar el parámetro de decimal como PDO :: PARAM_STR, en el proceso de almacenamiento del servidor SQL lo reciben como decimal (int, dec)

PHP

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

SQL Server, TIENDA PROCEDIMIENTO:

@valor_escala_desde decimal(18,2), 

y está hecho.

Cuestiones relacionadas