while obtener nombre mysqli_num_fields mysqli_fetch_row fields consulta columnas php types mysqli

mysqli_num_fields - obtener nombre de columnas mysql php



Tipo de datos PHP mysqli_fetch_field (4)

Necesito ayuda para rastrear un poco de información esencial sobre la información en el método fetch_field de un objeto resultado mysqli.

Específicamente, la propiedad type : de la documentación , parece que este campo devuelve un entero ...

¡Estupendo!

Parece que no puedo encontrar una tabla que me permita traducir el número a su respectivo tipo de datos. Ni siquiera estoy seguro de si estoy buscando información específica de php o mysql . Empujar venir a empujar Puedo trazarlo yo mismo, pero preferiría que alguien me señale la documentación real.

¿Qué me estoy perdiendo?


Primero quiero decir que reconozco la diferencia de 5 años en esta respuesta en comparación con la respuesta aceptada.

Aunque creo que la respuesta aceptada apunta a las personas en la dirección correcta, y he encontrado muchas otras respuestas que apuntan a esta publicación, no creo que esta sea una respuesta sólida a la pregunta, ni a muchas otras similares, específicamente a la parte que dice, "eso me permitirá traducir el número a su respectivo tipo de datos".

Para esto me propuse traer de vuelta un par de funciones que php solía tener que ya manejaban esto para nosotros, mysqli_field_flags ($ result, $ field_offset) y mysqli_field_type ($ result, $ field_offset), aunque mysqli_field_flags devuelve exactamente lo que las antiguas mysql_field_flags nos daría (en su mayor parte, hágamelo saber si alguien encuentra algo que no funciona exactamente como el anterior, y podemos actualizarlo aquí para que todos puedan tener acceso a él). El segundo, mysqli_field_type, solo devuelve los datos de tipo para el campo, a diferencia de mysql_field_type, que también devolvería los indicadores en la misma cadena.

Ambos pueden ser tomados de aquí, avíseme si alguno de ellos tiene problemas. (Además, no puedo responsabilizarme por completo de esta respuesta, ya que el crédito va a andre at koethur dot de para comentar con la mayoría de lo que necesitamos en el sitio web de php.net), acabo de agregar este bit directo para obtener nuestros números , y ajustó los nombres para ajustarse mejor al esquema de cosas, y como ya no existen las funciones php mysqli_field_flags y mysqli_field_type para mysqli, estas funcionan como funciones perfectas de compatibilidad con versiones anteriores.

SI ESTAS LE AYUDAN, POR FAVOR VOTE PARA QUE TENGAN EL MENSAJE, SI LO LEE POR FAVOR CAMBIE LA RESPUESTA;)

PHP 5.5 mysql_field_type "Función de compatibilidad hacia atrás", mysqli_field_type (observe el 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 "Función de compatibilidad hacia atrás", mysqli_field_flags (observe el 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; }


Creo que eso solo te dará algunas banderas; nullable o no, etc.

Tal vez sea mejor que consulte INFORMATION_SCHEMA.COLUMNS para obtener ese tipo de detalles.


La función PHP mysqli_fetch_field() parece corresponder directamente a la función de MySQL C API mysql_fetch_field() , que devuelve una estructura C de tipo MYSQL_FIELD , definida en mysql.h.

El campo de type de la estructura es un enum_field_types , que se define de la siguiente manera:

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 };