Cơ sở dữ liệu INFORMATION_SCHEMA là một phần của đặc tả ANSI năm 2003, vì vậy bạn có thể sử dụng qua bất kỳ nhà cung cấp DB hỗ trợ nó (MySQL, PostgreSQL , SQLite, MSSQL 2k5 +).
/*public static*/ function is_dbtype($table, $column, $type) {
$db = (...)::getInstance(); // assuming PDO
$sql = 'SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS '.
'WHERE TABLE_NAME = :table AND COLUMN_NAME = :column';
$st = $db->prepare($sql);
$st->execute(array(':table' => $table, ':column' => $column));
return ($type == $st->fetchColumn());
}
Thay đổi COLUMN_TYPE thành DATA_TYPE nếu bạn chỉ muốn "varchar" thay vì "varchar (64)". Nếu bạn cần nhiều hơn, có rất nhiều: IS_NULLABLE, NUMERIC_PRECISION, CHARACTER_SET_NAME, v.v.
(Không chắc chắn tôi sẽ sử dụng cá nhân, mặc dù vậy, chức năng is_*
thường đủ mà không cần thêm một cuộc gọi cơ sở dữ liệu. cấu trúc của mọi cơ sở dữ liệu trên máy chủ, do đó, cấp quyền đọc cho nó có thể (nên) là một việc lớn. Nếu bạn đang ở trên một máy chủ chia sẻ, bạn có thể sẽ không có quyền truy cập vào nó cả.)
MySQL- chỉ thay thế: làm tương tự nhưng với DESCRIBE [table]
. Nó khá rõ ràng mặc dù, bạn sẽ phải cá ra "bigint" trong "bigint (21) unsigned" chính mình nếu đó là tất cả các bạn muốn.
Không ai biết điều này? Tôi không thể là người đầu tiên nghĩ rằng điều này có thể hữu ích! – Industrial
BOUNTY đã bật! – Industrial