2009-11-07 12 views
7

Potrzebuję pomocy w wyszukaniu drobnych informacji na temat informacji w metodzie fetch_field obiektu wynikowego mysqli.PHP mysqli_fetch_field Typ danych

W szczególności, typ własność - od the documentation wydaje się, że to pole zwraca liczbę całkowitą ...

świetnie!

Po prostu nie mogę znaleźć tabeli, która pozwoli mi przetłumaczyć numer na odpowiedni typ danych. Nie jestem nawet pewien, czy szukam konkretnej informacji o php lub mysql. Pchaj, chodź, wpakuj, sam mogę to sobie wymyślić, ale wolałbym, żeby ktoś wskazał mi prawdziwą dokumentację.

Czego mi brakuje?

Odpowiedz

0

Myślę, że to tylko niektóre flagi; wyzerowany lub nie itp.

Być może lepiej byłoby zapytać INFORMATION_SCHEMA.COLUMNS, aby uzyskać tego rodzaju szczegóły.

+1

'flags' jest osobną własnością. Istnieje również własność 'type', która robi to, co chce. –

+0

Wygląda na to, że oba zestawy stałych (i prawdopodobnie inne) znajdują się na tej stronie. –

7

Funkcja PHP mysqli_fetch_field() wydaje map bezpośrednio do funkcji MySQL C API mysql_fetch_field(), która zwraca C struct typu MYSQL_FIELD, zdefiniowany mysql.h.

type pola struktury jest enum_field_types, która jest zdefiniowana w następujący sposób:

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

pierwsze chcę powiedzieć, że zrobić rozpoznać różnicę 5 rok w tej odpowiedzi w porównaniu z przyjętym odpowiedź.

Chociaż uważam, że zaakceptowana odpowiedź wskazuje na ludzi we właściwym kierunku i znalazłem wiele innych odpowiedzi, które wskazują na to stanowisko, nie uważam, że jest to solidna odpowiedź na to pytanie lub wiele podobnych , w szczególności część, która mówi: "to pozwoli mi przetłumaczyć numer na odpowiedni typ danych".

W tym celu postanowiłem przywrócić parę funkcji, które php miał wcześniej, które już dla nas obsługiwały, mysqli_field_flags ($ result, $ field_offset) i mysqli_field_type ($ result, $ field_offset), chociaż mysqli_field_flags zwraca dokładnie co by nam dały stare mysql_field_flags (w przeważającej części, daj mi znać, jeśli ktoś znajdzie coś, co nie działa dokładnie tak jak stary, i możemy go zaktualizować tutaj, aby wszyscy mogli uzyskać do niego dostęp). Drugi, mysqli_field_type, zwraca tylko dane typu dla pola, w przeciwieństwie do mysql_field_type, które również zwróci flagi w tym samym ciągu.

Oba można pobrać stąd, daj mi znać, jeśli wystąpią problemy. (dalej, nie mogę wziąć pełnej odpowiedzialności za tę odpowiedź, ponieważ kredyt trafia do andre at koethur dot de za komentowanie z większością tego, czego potrzebujemy na stronie php.net), właśnie dodałem ten bezpośredni bit, aby uzyskać nasze liczby i skorygować nazwy, które lepiej pasują do schematu, a ponieważ nie istnieją już funkcje php mysqli_field_flags i mysqli_field_type dla mysqli, działają one jak doskonałe funkcje kompatybilności wstecznej.

jeśli te pomóc PROSZĘ GŁOSUJ tak INNE się komunikat, JEŚLI PO czyta to zmień ODPOWIEDŹ;)

PHP 5.5 mysql_field_type „do tyłu Funkcja zgodności”, mysqli_field_type (zawiadomienie 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 "Kompatybilność wsteczna funkcyjne", mysqli_field_flags (zawiadomienie 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

Chociaż tego właśnie szukałem, zwracany typ również nie jest zgodny z tym, co 'mysql_fetch_field (...) -> type' zwrócił w PHP 5. Musiałem wypełnić tablicę ręcznie w następujący sposób:' $ types [3] = "int"; $ types [10] = 'date'; $ types [253] = 'string'; $ types [254] = 'string'; ' – Tarnschaf