2009-04-06 27 views

Trả lời

9

Tôi đã triển khai rất nhiều mã Zend_Db trong khung công tác Zend.

Như đã nêu khác, lý do mà Zend_Db trả về chuỗi thay vì số nguyên gốc PHP hoặc phao nổi 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ó kiểu PHP gốc để biểu diễn một kiểu cơ sở dữ liệu nào đó. Ví dụ: BIGINT của MySQL là số nguyên có ký hiệu 64 bit. Theo mặc định, loại PHP int đượ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 hoàn toàn dữ liệu sang 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, cho float và ngày, v.v.

Sử dụng biểu diễn chuỗi cho tất cả các loại dữ liệu là cách tốt nhất để duy trì đơn giản và nhất quán, an toàn tránh mất dữ liệu và tránh viết nhiều nhà cung cấp- mã trường hợp đặc biệt cụ thể để thực hiện ánh xạ kiểu dữ liệu. Mã bổ sung đó cũng sẽ chịu một hình phạt hiệu suất. Vì vậy, nếu bạn có trường hợp cụ thể nơi 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ự thực hiện nó trong mã ứng dụng của mình (ví dụ: trong lớp tùy chỉnh Zend_Db_Table_Row).

1

Cơ sở dữ liệu thường trả lại tập hợp kết quả dưới dạng văn bản. Trừ khi bộ chuyển đổi db của bạn chuyển đổi mọi thứ cho bạn (và âm thanh như của bạn không), tất cả các giá trị sẽ trở lại như chuỗi - ngày tháng, enums, vv cũng như số nguyên.

Nếu bạn đang xử lý một số lượng nhỏ các bảng chỉ với một vài trường số nguyên, chỉ cần chuyển đổi tay chúng. Nếu bạn đang đối phó với một tình huống phức tạp hơn một chút, bạn có thể lặp qua các cột bằng cách sử dụng các định nghĩa cơ sở dữ liệu (xem sqlite_fetch_column_types(), v.v.). Nếu tình hình của bạn phức tạp hơn có vẻ hợp lý đối với các giải pháp này, hãy xem xét chuyển sang một khuôn khổ có tính năng hơn.

0

Có vẻ như điều này đã được yêu cầu trong quá khứ nhưng chưa được triển khai. #ZF-300 được nhận xét lần cuối vào ngày 9 tháng 1 năm 09.

Có thể bạn có thể chia sẻ lý do tại sao bạn muốn thực hiện việc định kiểu và chúng tôi có thể giúp bạn theo cách khác? PHP khá dễ chịu khi nói đến các kiểu dữ liệu biến ...

0

Đối với một ví dụ về cách sử dụng một tùy chỉnh Zend_Db_Table_Row để có được các loại dữ liệu chính xác, như Bill Karwin đề nghị, có một cái nhìn tại các lớp học ở đây: http://www.zfsnippets.com/snippets/view/id/70

Nó có thể được thực hiện trong mô hình của bạn như:

class YourTableName extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'your_table_name'; 
    protected $_rowClass = 'Model_Row_Abstract'; 
} 

Bạn có thể muốn thay đổi kiểu dữ liệu của Model_Row_Abstract cho tinyint thành bool nếu bạn sử dụng nó đúng để giữ giá trị boolean.

Các vấn đề liên quan