Tôi đã triển khai rất nhiều Zend_Db
mã trong Zend Framework.
Như những người khác đã nêu, lý do mà Zend_Db
trả về chuỗi thay vì số nguyên PHP gốc hoặc float là phần mở rộng cơ sở dữ liệu của PHP trả về chuỗi. Và lý do cho điều đó là có thể không có loại PHP gốc nào để đại diện cho một số loại cơ sở dữ liệu nhất định.
Ví dụ:BIGINT
của MySQL là một số nguyên có dấu 64-bit. Theo mặc định, PHP int
kiểu được giới hạn ở các giá trị 32 bit, vì vậy nếu bạn tìm nạp dữ liệu từ cơ sở dữ liệu và chuyển đổi ngầm nó thành int
, một số giá trị có thể bị cắt bớt. Có một số trường hợp tương tự khác, đối với float
và ngày tháng, v.v.
Sử dụng biểu diễn chuỗi cho tất cả các kiểu dữ liệu là cách tốt nhất để duy trì sự đơn giản và nhất quán, an toàn về việc tránh mất dữ liệu và tránh viết nhiều mã trường hợp đặc biệt của nhà cung cấp để thực hiện ánh xạ kiểu dữ liệu. Mã bổ sung đó cũng sẽ bị phạt hiệu suất.
Vì vậy, nếu bạn gặp các trường hợp cụ thể mà bạn cần kết quả cơ sở dữ liệu được ánh xạ tới các kiểu dữ liệu PHP gốc, bạn nên tự triển khai nó trong mã ứng dụng của mình (ví dụ:trong Zend_Db_Table_Row
tùy chỉnh lớp).