laravel SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect decimal value: 'buy_amt * 0.00097812555575316' for column 'price' at row 1 에러
조회수 818회
전체 데이터를 업데이트 하려고 하는데 매입가에 마진율 계산해서 환율만큼 나눠야하는데 데이터 포맷 에러가 나네요ㅠㅠ;
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect decimal value: 'buy_amt * 0.00097812555575316' for column 'prod' at row 1 (SQL: update prod set value = 10, price = buy_amt * 0.00097812555575316 )
에러코드에 나오는 sql을 돌리면 제대로 실행되는데 뭐가 문제일까요
use DB;
DB::update("update prod set value = ?, price = ?, ",
[
$datas["value"],
"buy_amt * ".(1+($datas["value"]/100))/$datas["price"],
]);
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
그러니까 mysql이 직접 연산을 하게 하고 싶으신 거죠? 그럴 땐
DB::raw()
를 쓰셔야 합니다.이런 사례를 참고해 보면 대략 이렇게 하시면 되겠네요.
DB::table('prod')->update([ 'value' => $datas["value"], 'price' => DB::raw("buy_amt * ".(1+($datas["value"]/100))/$datas["price"]) ]);
PS: 개인적으로는 mysql이 연산하게 하는 것을 권하지 않습니다. 업데이트 날리기 전에 소스에서 필요한 계산값을 구하고 그 결과만 업데이트문에 넣어주는 것이 (PHP쪽이나 mysql쪽이나) 더 빠르고 원활할 겁니다.
댓글 입력