2010-04-27 6 views
62

나는이 개 데이터베이스 필드십진수 타입의 PDO :: PARAM?

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

내가 그들을 업데이트 2 개 PDO 쿼리를 가지고 있습니다. int를 업데이트하는 것은 정상적으로 동작합니다. ok

그러나 십진수 필드를 업데이트 할 수 없습니다. 나는 아래의 3 가지 방법을 시도했지만, 아무것도

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

그것은 데이터베이스 유형 decimal에 문제를 보인다 작동하지? decimal 필드에 PDO::PARAM이 있습니까? 그렇지 않은 경우 해결 방법으로 무엇을 사용합니까?

+0

검색어를 준비하십시오. – Galen

+0

가능한 복제본은 http://stackoverflow.com/questions/1335081/what-is-the-best-way-to-bind-decimal-double-float-values-with-pdo입니다. -in-php –

답변

61

십진수/부동 소수점에는 PDO::PARAM가 없으므로 PDO::PARAM_STR을 사용해야합니다.

+2

그건 제가 시도한 것들 중 하나 였고 여기서 질문을 게시하기 전에는 작동하지 않았습니다. – dmontain

+0

@dmontain : $ decval을 문자열 (예 :'1.0 '대신'''1.0 '')로 정의하거나'strval ($ decval)'을 사용하십시오. –

+5

@dmontain : 아무 것도 지정되지 않은 경우 기본값으로 'PDO :: PARAM_STR'이 사용됩니다. ** ** 열 데이터 형식을 변경하면 안됩니다. 이 값을'$ update_decval-> bindParam (': decval', strval ($ decval), PDO :: PARAM_STR);'와 같이 큰 따옴표 나'strval()'로 묶으십시오. –

0

PDO를 사용하여 DOULBE를 저장하는 방법을 찾았습니다. 세 번째 인수 (예 : PDO :: PARAM_ *)를 제공하지 않으면 일종의 마법을 사용하고 번호를 올바르게 저장합니다. 그래서 PDO를 매개 변수 유형에 대해 걱정하지 않고 유쾌하게 바인드 한 경우 $ decval에 decval하고 다음 작업에 따라 건너 뛰기 :-))

+7

이것은 일종의 마법이 아니라 허용 된 답변에서와 같이 매개 변수를 문자열로 취급하는 것입니다. – PeerBr

0

UP은 PDO :: PARAM_STR과 동일해야하며 데이터베이스의 열이 NUMERIC (M, D) 또는 소수 (M, D) 유형 인 경우 M은 입력 할 수있는 문자의 합계를 나타내는 정밀도 여야합니다. 소수 자릿수. 숫자 NUMERIC (10,2)의 예제에서 우리는 정확도와 소수 둘째 자리에 8 개의 집을 가지고 있습니다. 그래서 우리는 총 10 문자를 가지고 소수점 2 자리를 예약했습니다.

나는 해결책을 발견
0

, SQL 서버 저장 프로 시저, PDO :: PARAM_STR처럼 소수점 매개 변수를 보내 소수점처럼 수신 (INT 12 월)

PHP

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

SQL 서버에 저장 프로 시저 :

@valor_escala_desde decimal(18,2), 

.