2009-11-07 2 views
7

Ich brauche Hilfe, um ein wenig nittty kitty Informationen über die Informationen in der fetch_field-Methode eines mysqli-Ergebnisobjekts zu finden.PHP mysqli_fetch_field Datentyp

Insbesondere die Typ Eigenschaft - von the documentation würde es scheinen, dass dieses Feld einen Integer zurückgibt ...

Great!

Ich kann einfach nicht scheinen, eine Tabelle zu finden, die mich die Zahl auf seinen jeweiligen Datentyp übersetzen lässt. Ich bin nicht einmal sicher, ob ich nach php oder mysql spezifischen Informationen suche. Push come to shove Ich kann es selbst gestalten, aber mir wäre es viel lieber, wenn mich jemand auf die eigentliche Dokumentation hinweisen könnte.

Was fehlt mir?

Antwort

0

Ich denke das wird dir nur ein paar Flaggen geben; Nullable oder nicht usw.

Sie könnten besser abfragen INFORMATION_SCHEMA.COLUMNS, um diese Art von Details zu erhalten.

+1

'flags' ist eine separate Eigenschaft. Es gibt auch eine "type" -Eigenschaft, die tut, was sie will. –

+0

Es sieht so aus, als ob beide Sätze von Konstanten (und wahrscheinlich andere) auf dieser Seite sind. –

7

Die PHP Funktion mysqli_fetch_field() scheint mysql_fetch_field(), direkt an die MySQL C-API-Funktion zuzuordnen, die eine C struct des Typs in mysql.h MYSQL_FIELD definiert zurück.

Das type Feld der Struktur ist ein enum_field_types, die wie folgt definiert ist:

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

Zuerst möchte ich ich den Unterschied 5 Jahre in dieser Antwort nicht sagen, erkennen im Vergleich zu der Antwort akzeptiert.

Obwohl ich glaube, dass die akzeptierte Antwort die Menschen in die richtige Richtung weist und ich viele andere Antworten gefunden habe, die auf diesen Beitrag zurückführen, empfinde ich das nicht als solide Antwort auf die Frage oder viele andere mögen es speziell der Teil, der sagt: "Das wird mir erlauben, die Zahl in ihren jeweiligen Datentyp zu übersetzen".

Dazu machte ich mich ein paar Funktionen zu bringen, die verwendet PHP haben, dass dies bereits für uns behandelt, mysqli_field_flags ($ result, $ field_offset) und mysqli_field_type ($ result, $ field_offset), obwohl die mysqli_field_flags genau zurück Was die alten mysql_field_flags uns geben würden (in den meisten Fällen lass es mich wissen, wenn jemand etwas findet, das nicht genau wie das alte funktioniert, und wir können es hier aktualisieren, damit alle darauf zugreifen können). Die zweite, mysqli_field_type, gibt nur die Typdaten für das Feld zurück, im Gegensatz zu mysql_field_type, die auch die Flags in der gleichen Zeichenfolge zurückgibt.

Beide können von hier ergriffen werden, lassen Sie mich wissen, wenn beide Probleme haben. (weiter, ich kann nicht die volle Verantwortung für diese Antwort ergreifen, da das Guthaben andre at koethur dot de für das Kommentieren mit dem meisten von dem, was wir brauchen, auf der php.net Website), ich habe gerade dieses direkte Bit hinzugefügt, um unsere Zahlen zu erhalten, und die angepasst Namen, die besser zum Schema der Dinge passen, und da es für mysqli noch keine PHP-Funktionen mysqli_field_flags und mysqli_field_type gibt, funktionieren diese als perfekte Abwärtskompatibilitätsfunktionen.

FALLS SIE HILFE SIE BITTE OUT ABSTIMMUNG AUF EINE ANDERE SO die Meldung, WENN OP liest diese BITTE DIE ANTWORT ÄNDERN;)

PHP 5.5 mysql_field_type "Abwärtskompatibilität Function", mysqli_field_type (man beachte die 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 "Abwärtskompatibilität Function", mysqli_field_flags (man beachte die 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

Obwohl dies genau das ist, nach dem ich gesucht habe, scheint der zurückgegebene Typ auch nicht mit dem in PHP 5 zurückgegebenen 'mysql_fetch_field (...) -> type 'kompatibel zu sein. Ich musste das Array manuell füllen:' $ types [3] = 'int'; $ types [10] = 'Datum'; $ types [253] = 'string'; $ types [254] = 'string'; ' – Tarnschaf