PDO :: PARAM cho kiểu thập phân?


78

Tôi có 2 trường cơ sở dữ liệu

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

Tôi có 2 truy vấn pdo cập nhật chúng. Cái cập nhật int hoạt động tốt

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

nhưng tôi không thể cập nhật trường thập phân. Tôi đã thử 3 cách dưới đây nhưng không có gì hiệu quả

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

Có vẻ như vấn đề là với loại cơ sở dữ liệu decimal? Có PDO::PARAMmột trường thuộc loại decimalkhông? Nếu không, tôi phải sử dụng cách giải quyết nào?


vui lòng đăng câu hỏi mà bạn chuẩn bị
Galen

bản sao có thể có của stackoverflow.com/questions/1335081/…
Alix Axel

Câu trả lời:


88

Không có bất kỳ PDO::PARAMcho số thập phân / số trôi nổi, bạn sẽ phải sử dụng PDO::PARAM_STR.


2
Đó là một trong những điều tôi đã thử và không hiệu quả trước khi đăng câu hỏi ở đây.
dmontain

@dmontain: Hãy thử định nghĩa $ decval dưới dạng một chuỗi (ví dụ: '1.0'thay vì 1.0) hoặc sử dụng strval($decval).
Alix Axel

6
@dmontain: Nó sẽ hoạt động ngoài hộp ( PDO::PARAM_STRlà mặc định khi không có giá trị nào được chỉ định) và bạn không nên thay đổi kiểu dữ liệu cột của mình. Chỉ cần gửi kèm theo giá trị với đơn hay ngoặc kép hoặc strval()nó, như thế này: $update_decval->bindParam(':decval', strval($decval), PDO::PARAM_STR);.
Alix Axel

@Alix, tôi không biết tại sao strvalnó không hoạt động. Nghe có vẻ như một câu trả lời rất hợp lý, nhưng có điều gì đó không hoạt động ở đó. Tôi đang thử các cách kết hợp khác nhau để xem liệu cách nào trong số chúng có hiệu quả không.
dmontain

17
@dmontain: Từ Hướng dẫn sử dụng PHP: Không giống như PDOStatement :: bindValue (), biến được ràng buộc như một tham chiếu và sẽ chỉ được đánh giá tại thời điểm mà PDOStatement :: execute () được gọi. - bạn phải sử dụng bindValue()thay thế nếu bạn muốn sử dụng strval().
Alix Axel

0

UP phải sử dụng cùng PDO :: PARAM_STR và lưu ý rằng nếu cột trong cơ sở dữ liệu thuộc loại NUMERIC (M, D) hoặc thập phân (M, D) thì nên quan sát rằng M là số ký tự chính xác phải là tổng số ký tự mà bạn có thể nhập và D là số vị trí thập phân. Trong ví dụ NUMERIC (10,2), chúng ta có 8 ngôi nhà chính xác và hai chữ số thập phân. Vì vậy, chúng tôi có tổng cộng 10 ký tự với 2 ký tự dành cho vị trí thập phân.


0

Tôi đã tìm thấy một giải pháp, hãy gửi tham số thập phân như PDO :: PARAM_STR, trong thủ tục lưu trữ máy chủ sql nhận nó như thập phân (int, dec)

PHP

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

SQL SERVER, QUY TRÌNH CỬA HÀNG:

@valor_escala_desde decimal(18,2),

và được thực hiện.


0

sử dụng PDO :: PARAM_STR cho tất cả các loại cột không thuộc loại int hoặc Bool

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.