2009-11-07 11 views
7

Ho bisogno di aiuto per rintracciare un po 'di informazioni nitty grustose sulle informazioni nel metodo fetch_field di un oggetto risultato mysqli.PHP mysqli_fetch_field tipo di dati

In particolare il tipo proprietà - da the documentation sembrerebbe che questo campo restituisce un intero ...

Grande!

Non riesco a trovare una tabella che mi consenta di tradurre il numero nel rispettivo tipo di dati. Non sono nemmeno sicuro se sto cercando php o mysql informazioni specifiche. Spingi a spingere Posso mapparlo da solo, ma preferirei molto che qualcuno mi indicasse la documentazione vera e propria.

Cosa mi manca?

risposta

0

Penso che ti darò solo delle bandiere; nullable o non ecc.

Potrebbe essere meglio interrogare INFORMATION_SCHEMA.COLUMNS per ottenere quel tipo di dettagli.

+1

'flags' è una proprietà separata. C'è anche una proprietà 'type' che fa ciò che vuole. –

+0

Sembra che entrambi gli insiemi di costanti (e probabilmente altri) siano in questa pagina. –

7

La funzione PHP mysqli_fetch_field() sembra mappare direttamente alla funzione di MySQL C API mysql_fetch_field(), che restituisce una struct C di tipo MYSQL_FIELD, definito in mysql.h.

La type campo della struttura è un enum_field_types, che è definito come segue:

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

Prima di tutto voglio dire che faccio riconoscere la differenza cinque anni in questa risposta rispetto alla risposta accettata.

Anche se sento che la risposta accettata indica la gente nella giusta direzione, e ho trovato molte altre risposte che rimandano a questo post, non ritengo che questa sia una risposta solida alla domanda, o molte altre come questa , in particolare la parte che dice "che mi consentirà di tradurre il numero nel rispettivo tipo di dati".

Per questo ho deciso di richiamare un paio di funzioni che php aveva già utilizzato per questo, mysqli_field_flags ($ result, $ field_offset) e mysqli_field_type ($ result, $ field_offset), anche se mysqli_field_flags restituisce esattamente quello che i vecchi mysql_field_flags ci avrebbero dato (per la maggior parte, fammi sapere se qualcuno trova qualcosa che non funziona esattamente come il vecchio, e possiamo aggiornarlo qui in modo che tutti possano accedervi). Il secondo, mysqli_field_type, restituisce solo i dati di tipo per il campo, a differenza di mysql_field_type, che restituirebbe anche i flag nella stessa stringa.

Entrambi questi possono essere presi da qui, fammi sapere se hanno problemi. (inoltre, non posso assumermi la piena responsabilità di questa risposta, poiché il credito va a andre at koethur dot de per commentare con la maggior parte di ciò di cui abbiamo bisogno sul sito php.net), ho appena aggiunto questo bit diretto per ottenere i nostri numeri, e aggiustato il nomi per adattarsi meglio allo schema delle cose, e dal momento che non esistono funzioni di php mysqli_field_flags e mysqli_field_type già per mysqli, queste funzionano come perfette funzioni di retrocompatibilità.

SE QUESTI dare una mano si prega di votare in modo ALTRO Ottenere il messaggio, se OP legge questo si prega di modificare la risposta;)

PHP 5.5 mysql_field_type "Funzione di compatibilità con le versioni precedenti", mysqli_field_type (notare la 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 "Backward Compatibility funzione", mysqli_field_flags (notare la 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

Anche se questo è quello che stavo cercando, il tipo restituito sembra non essere compatibile con ciò che 'mysql_fetch_field (...) -> type' restituito in PHP 5. Ho dovuto riempire manualmente l'array in questo modo:' $ types [3] = 'int'; $ types [10] = 'date'; $ types [253] = 'string'; $ types [254] = 'string'; ' – Tarnschaf