2009-11-07 40 views
7

Tôi cần một số trợ giúp theo dõi một chút thông tin gritty nitty về thông tin trong phương thức fetch_field của đối tượng kết quả mysqli.PHP mysqli_fetch_field kiểu dữ liệu

Cụ thể loại bất động sản - từ the documentation nó sẽ có vẻ rằng lĩnh vực này trả về một số nguyên ...

Tuyệt vời!

Tôi dường như không thể tìm thấy một bảng cho phép tôi dịch số đó sang loại dữ liệu tương ứng. Tôi thậm chí không chắc chắn nếu tôi đang tìm kiếm php hoặc mysql thông tin cụ thể. Đẩy đến xô tôi có thể bản đồ nó ra bản thân mình, nhưng tôi muốn thay vì nếu ai đó có thể chỉ cho tôi tài liệu thực tế.

Tôi đang thiếu gì?

Trả lời

11

Bạn có thể so sánh con số này với các hằng số khác nhau được xác định trước, được liệt kê ở đây:

http://www.php.net/manual/en/mysqli.constants.php

ví dụ MYSQLI_TYPE_SHORT

+0

Làm đẹp - cảm ơn bạn! –

0

Tôi nghĩ rằng nó sẽ chỉ cung cấp cho bạn một số cờ; nullable or not etc.

Bạn có thể truy vấn tốt hơn INFORMATION_SCHEMA.COLUMNS để nhận được loại chi tiết đó.

+1

'flags' là thuộc tính riêng biệt. Ngoài ra còn có một thuộc tính 'type' làm những gì anh ta muốn. –

+0

Dường như cả hai tập hợp các hằng số (và có thể là những người khác) đều nằm trên trang này. –

7

Chức năng PHP mysqli_fetch_field() dường như để ánh xạ trực tiếp đến MySQL C hàm API mysql_fetch_field(), mà trả về một struct C kiểu MYSQL_FIELD, quy định tại mysql.h.

Các type lĩnh vực cấu trúc là một enum_field_types, được định nghĩa như sau:

enum_field_types { 
    MYSQL_TYPE_DECIMAL, 
    MYSQL_TYPE_TINY, 
    MYSQL_TYPE_SHORT, 
    MYSQL_TYPE_LONG, 
    MYSQL_TYPE_FLOAT, 
    MYSQL_TYPE_DOUBLE, 
    MYSQL_TYPE_NULL, 
    MYSQL_TYPE_TIMESTAMP, 
    MYSQL_TYPE_LONGLONG, 
    MYSQL_TYPE_INT24, 
    MYSQL_TYPE_DATE, 
    MYSQL_TYPE_TIME, 
    MYSQL_TYPE_DATETIME, 
    MYSQL_TYPE_YEAR, 
    MYSQL_TYPE_NEWDATE, 
    MYSQL_TYPE_VARCHAR, 
    MYSQL_TYPE_BIT, 
    MYSQL_TYPE_NEWDECIMAL=246, 
    MYSQL_TYPE_ENUM=247, 
    MYSQL_TYPE_SET=248, 
    MYSQL_TYPE_TINY_BLOB=249, 
    MYSQL_TYPE_MEDIUM_BLOB=250, 
    MYSQL_TYPE_LONG_BLOB=251, 
    MYSQL_TYPE_BLOB=252, 
    MYSQL_TYPE_VAR_STRING=253, 
    MYSQL_TYPE_STRING=254, 
    MYSQL_TYPE_GEOMETRY=255 
}; 
1

Trước tiên tôi muốn nói rằng tôi làm nhận ra sự khác biệt 5 năm trong câu trả lời này so với câu trả lời chấp nhận.

Mặc dù tôi cảm thấy câu trả lời được chấp nhận hướng mọi người đi đúng hướng và tôi đã tìm thấy nhiều câu trả lời khác quay lại bài đăng này, tôi không cảm thấy đây là câu trả lời chắc chắn cho câu hỏi hoặc nhiều câu trả lời khác , cụ thể là phần nói, "điều đó sẽ cho phép tôi dịch số đó thành loại dữ liệu tương ứng".

Đối với điều này tôi đặt ra để mang lại một vài chức năng mà php đã từng xử lý cho chúng tôi, mysqli_field_flags ($ result, $ field_offset) và mysqli_field_type ($ result, $ field_offset), mặc dù mysqli_field_flags trả về chính xác những gì các mysql_field_flags cũ sẽ cung cấp cho chúng tôi (đối với hầu hết các phần, cho tôi biết nếu có ai đó tìm thấy một cái gì đó không hoạt động chính xác như cũ, và chúng tôi có thể cập nhật nó ở đây để tất cả có thể truy cập vào nó). Cái thứ hai, mysqli_field_type, chỉ thực sự trả về dữ liệu kiểu cho trường, không giống như mysql_field_type, cũng sẽ trả về các cờ trong cùng một chuỗi.

Cả hai thứ này đều có thể được lấy từ đây, hãy cho tôi biết nếu có sự cố. (hơn nữa, tôi không thể hoàn toàn chịu trách nhiệm về câu trả lời này, vì tín dụng được chuyển đến andre at koethur dot de để nhận xét với hầu hết những gì chúng tôi cần trên trang web php.net), tôi vừa thêm bit trực tiếp này để lấy số của chúng tôi và điều chỉnh tên để phù hợp hơn với sơ đồ của sự vật, và vì không có mysqli_field_flags php và các hàm mysqli_field_type đã có cho mysqli, chúng hoạt động như các hàm tương thích ngược hoàn hảo.

NẾU Điều này giúp bạn OUT hãy bỏ phiếu UP SO KHÁC nhận được thông báo, NẾU OP READS NÀY XIN THAY ĐỔI TRẢ LỜI;)

PHP 5,5 mysql_field_type "Chức năng Compatibility ngược", mysqli_field_type (chú ý i)

/** 
* Returns a string that represents the mysql field type 
* 
* @param mysqli_resource $result The result resource that is being evaluated. This result comes from a call to mysql_query(). 
* @param integer $field_offset The numerical field offset. The field_offset starts at 0. If field_offset does not exist, an error of level E_WARNING is also issued. 
*/ 
function mysqli_field_type($result , $field_offset) { 
    static $types; 

    $type_id = mysqli_fetch_field_direct($result,$field_offset)->type; 

    if (!isset($types)) 
    { 
     $types = array(); 
     $constants = get_defined_constants(true); 
     foreach ($constants['mysqli'] as $c => $n) if (preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types[$n] = $m[1]; 
    } 

    return array_key_exists($type_id, $types)? $types[$type_id] : NULL; 
} 

PHP 5,5 mysql_field_flags "Chức năng Compatibility ngược", mysqli_field_flags (chú ý i)

/** 
* Returns a string that represents the mysql field flags 
* 
* @param mysqli_resource $result The result resource that is being evaluated. This result comes from a call to mysql_query(). 
* @param integer $field_offset The numerical field offset. The field_offset starts at 0. If field_offset does not exist, an error of level E_WARNING is also issued. 
*/ 
function mysqli_field_flags($result , $field_offset) { 
    static $flags; 

    // Get the field directly 
    $flags_num = mysqli_fetch_field_direct($result,$field_offset)->flags; 

    if (!isset($flags)) 
    { 
     $flags = array(); 
     $constants = get_defined_constants(true); 
     foreach ($constants['mysqli'] as $c => $n) if (preg_match('/MYSQLI_(.*)_FLAG$/', $c, $m)) if (!array_key_exists($n, $flags)) $flags[$n] = $m[1]; 
    } 

    $result = array(); 
    foreach ($flags as $n => $t) if ($flags_num & $n) $result[] = $t; 

    $return = implode(' ', $result); 
    $return = str_replace('PRI_KEY','PRIMARY_KEY',$return); 
    $return = strtolower($return); 

    return $return; 
} 
+0

Mặc dù đây là những gì tôi đang tìm kiếm, kiểu trả về cũng có vẻ không tương thích với những gì 'mysql_fetch_field (...) -> type' được trả về trong PHP 5. Tôi phải điền vào mảng bằng tay như thế này:' $ types [3] = 'int'; $ type [10] = 'ngày'; $ loại [253] = 'chuỗi'; $ loại [254] = 'chuỗi'; ' – Tarnschaf

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