Thật không may, với PHP < = 5.2, MySQL chức năng/lớp (tức là mysql_*
, mysqli_*
, và PDO
) đều dựa trên libmysql - một thư viện C cung cấp hỗ trợ cho giao tiếp với máy chủ MySQL.
Chức năng sử dụng thư viện đó luôn trả về chuỗi, ngay cả đối với cột nguyên và cột nổi - và không có gì bạn có thể làm: giải pháp duy nhất là có một số "lớp bản đồ" (như ORM) biết ", ở phía PHP, loại mỗi cột sẽ là, và sẽ thực hiện chuyển đổi mỗi khi một số dữ liệu được tìm nạp từ cơ sở dữ liệu.
Lưu ý: cách bạn chèn dữ liệu không thay đổi bất kỳ điều gì về thực tế là bạn sẽ nhận được chuỗi khi tìm nạp dữ liệu từ DB.
Với PHP> = 5.3, các chức năng liên lạc với máy chủ MySQL có thể sử dụng mysqlnd (MySQL Native Driver) thay vì libmysql - điều này phải được cấu hình tại thời gian biên dịch.
Và có thể giao tiếp với các kiểu dữ liệu "gốc", trong một số trường hợp nhất định, là một trong những điều tốt đẹp mà mysqlnd cung cấp; về điều đó, cần có một vài thông tin thú vị là bài viết này: PHP: New network traffic, CPU and memory savings with mysqlnd.
Để làm cho mọi thứ ngắn:
- Với PHP 5.2, bạn sẽ chỉ nhận được chuỗi từ cơ sở dữ liệu; và bạn sẽ phải thực hiện một số loại chuyển đổi cho mình
- Với PHP 5.3, bạn có thể nhận được kiểu dữ liệu gốc - ít nhất trong một số trường hợp.
Nguồn
2010-02-23 12:10:18
Lời cảm ơn đầu tiên, nhưng tại sao tôi cần phải "nói" loại dữ liệu khi trường này được khai báo trong SQL TABLE dưới dạng INT ... – aviv
, vì giao diện db không hỗ trợ điều này. Tất cả những gì bạn nhận được từ db là một chuỗi các chuỗi.Bạn có thể chuyển đổi một số chuỗi này thành một chuỗi khác ở cấp ứng dụng, nhưng điều này sẽ không xảy ra "tự động" mà không có lớp ORM đầy đủ. – user187291