2012-07-11 21 views
8

Estoy convirtiendo parte de mi código de la antigua extensión mysql a la extensión mysqli en PHP. Anteriormente, con la extensión MySQL, que había utilizado un código como este para encontrar la clave principal de una tabla:cómo saber si la columna es la clave principal usando mysqli?

while ($i < mysql_num_fields($result)) { 
    $meta = mysql_fetch_field($result, $i); 
    if ($meta->primary_key == 1){ 
     $primary_key = $meta->name; 
    } 
    $i++; 
} 

$meta->primary_key == 1 era muy conveniente.

Hasta ahora se han convertido al código para usar mysqli:

while ($i < $result->field_count) { 
    $meta = $result->fetch_field; 
    if ($meta->primary_key == 1){ 
     $primary_key = $meta->name; 
    } 
    $i++; 
} 

Por supuesto, al mirar los documentos here podemos ver que $meta->primary_key no existe en mysqli. Veo que hay un $meta->flags. Esta es mi mejor suposición, aunque no estoy seguro de qué valor debe tener flags cuando tengo una clave principal.

¿Alguien sabe cómo digo qué columna es la clave principal para una tabla usando mysqli?

Gracias!

EDITAR Aquí hay un código de trabajo:

//get primary key 
$primary_key = ''; 
while ($meta = $result->fetch_field()) { 
    if ($meta->flags & MYSQLI_PRI_KEY_FLAG) { 
     $primary_key = $meta->name; 
    } 
} 
+2

ejecutar la consulta "describe' table_name' "? – Waygood

+0

Buen punto, eso requeriría una transacción separada con el DB, que es factible. Prefiero usar la información que ya se obtuvo en el conjunto de resultados. –

Respuesta

7

Eras muy cerca, necesitará la propiedad flags.

La bandera que busca es MYSQLI_PRI_KEY_FLAG, lo que significa:

El campo es parte de un índice primario

Usted puede probar por la bandera con algo como:

if ($meta->flags & MYSQLI_PRI_KEY_FLAG) { 
    //it is a primary key! 
} 

Usted está usando & aquí como Bitwise AND Operator.

Cuestiones relacionadas