MySQLi equivalente de mysql_result ()?

5 minutos de lectura

MySQLi equivalente de mysql result
DOOManíaco

Estoy transfiriendo un código PHP antiguo de mysql a MySQLi, y me encontré con un inconveniente menor.

¿No hay equivalente al viejo mysql_result() ¿función?

mysql_result() es más lento que las otras funciones cuando trabajas con más de 1 fila, pero muchas veces solo tengo 1 resultado y 1 campo. Usarlo me permite condensar 4 líneas en 1.

Código antiguo:

if ($r && mysql_num_rows($r))  
    $blarg = mysql_result($r, 0, 'blah');

Código deseado:

if ($r && $r->num_rows)  
    $blarg = $r->result(0, 'blah');

Pero no hay tal cosa. 🙁

¿Se me escapa algo? O tendré que aguantarme y hacer todo:

if ($r && $r->num_rows)  
{  
    $row = $r->fetch_assoc();  
    $blarg = $row['blah'];  
}

  • ¿Qué terminaste usando aquí? Estoy en la misma situación

    – Drewdin

    18 de septiembre de 2012 a las 14:34

  • Nunca hice nada con esto. solo estoy usando if ($r && $r->num_rows) $blarg = $r->result(0, 'blah'); en las raras ocasiones que lo necesito…

    – DOOManíaco

    18/09/2012 a las 20:23

  • gracias, terminé usando mysqli_query y mysqli_fetch_assoc para mostrar los resultados.

    – Drewdin

    19/09/2012 a las 18:45

MySQLi equivalente de mysql result
Mario Lurig

Tiempo contestadas, pensé que podría mejorar la respuesta dada después de tener la misma pregunta. La siguiente función replica completamente la función mysql_result() y devuelve falso cuando está fuera de los límites de su solicitud (resultado vacío, sin fila de ese número, sin columna de ese número). Tiene el beneficio adicional de que, si no especifica la fila, asume 0,0 (se pasa un valor menos). La función se actualizó para permitir el desplazamiento numérico del campo. o el nombre del campo.

function mysqli_result($res,$row=0,$col=0){ 
    $numrows = mysqli_num_rows($res); 
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}

  • En lugar de llamar a mysqli_num_rows() dos veces, podría hacer: mysqli_num_rows($res) > $row)

    –Craig Francis

    02/04/2014 a las 14:50

  • Para reducir las llamadas, podría ajustarse de la siguiente manera: $numrows = myqsli_num_rows($res); if ($numero de filas && $fila <= ($numero de filas-1) && $fila >=0){

    – Mario Lurig

    02/04/2014 a las 18:36

  • Tomando nota de que ha sido un día largo… pero si myqsli_num_rows() devuelve 0, entonces if (mysqli_num_rows($result) > $row) { ... }¿no es eso todo lo que necesita verificar?… suponiendo que no va a pasar en una $fila = -1… o con el resultado opuesto de 5 filas devueltas… si pide la fila 0 eso es menos que 5 (le da el primer registro), pedir la fila 4 también es bueno (le da el último registro), pedir la fila 5 o 6 falla (5 o 6 no es menos que 5).

    –Craig Francis

    03/04/2014 a las 17:17

  • Craig, tienes razón, pero dado que es un reemplazo funcional de mysql_result(), no quería asumir que no había ningún error de usuario ($fila=-1). Pero sí, simplificándolo a: if ($fila >= 0 && mysqli_num_rows($res) > $fila){

    – Mario Lurig

    03/04/2014 a las 20:55

  • La función fue actualizada. Anteriormente, $col tenía que ser el desplazamiento numérico. Ahora, también acepta el nombre del campo.

    – Mario Lurig

    20 de diciembre de 2014 a las 6:27

PHP 5.4 ahora es compatible desreferenciación de matrices de funcioneslo que significa que puedes hacer esto:

if ($r && $r->num_rows)  
{  
    $row = $r->fetch_assoc()['blah'];  
}

MySQLi equivalente de mysql result
HertzaHaeon

Puede hacer esto obteniendo un objeto en lugar de una matriz.

$mysqli->query("SELECT email FROM users WHERE userid = 'foo'")->fetch_object()->email;

Necesita PHP 5+ para usar el encadenamiento de métodos como este.

Alternativamente, si usa MySQLi procedimental, es fácil escribir su propio mysqli_result función que coincide mysql_result.

  • No necesita PHP5 para encadenar objetos.

    – Kevin Peno

    5 mayo 2011 a las 16:20


  • No he intentado encadenar en PHP 4, pero estoy seguro de que he leído varios artículos sobre cómo había una diferencia en la devolución de objetos en PHP 4 que hacía imposible el encadenamiento.

    – Hertza Haeon

    6 mayo 2011 a las 15:31

  • Después de una verificación adicional, parece que PHP4 no devuelve objetos por referencia, lo que haría imposible el encadenamiento de métodos. Hay muchos artículos escritos sobre esto.

    – Hertza Haeon

    12 mayo 2011 a las 15:37


  • Creo que sería útil una versión de este código sin el método de encadenamiento. Especialmente porque la pregunta es sobre la migración de mysql a mysqli en lugar de PHP4 a 5.

    – Caltor

    23 de noviembre de 2011 a las 12:18

1646972110 196 MySQLi equivalente de mysql result
cris

function db_result($result,$row,$field) { 
  if($result->num_rows==0) return 'unknown'; 
  $result->data_seek($row);
  $ceva=$result->fetch_assoc(); 
  $rasp=$ceva[$field]; 
  return $rasp; 
}

Bueno, siempre puedes acortarlo a algo como esto:

if ($r && $r->num_rows)
    list($blarg) = $r->fetch_row();

Pero eso podría ser lo mejor que vas a conseguir.

1646972110 985 MySQLi equivalente de mysql result
Nisse Engström

Le sugiero que agregue esta línea a la solución de Cris para poder obtener un resultado haciendo ambas cosas db_result('mytable.myfield) y db_result('myfield') ya que es el comportamiento por defecto del original mysql_result función.

function db_result($result,$row,$field) { 
    if($result->num_rows==0) return 'unknown'; 
    $result->data_seek($row);
    $ceva=$result->fetch_assoc(); 
    return (isset($ceva[$field])?$ceva[$field]
        :(strpos($field,'.')?$ceva[substr($field,strrpos($field,'.')+1)]:'')); 
}

1646972111 12 MySQLi equivalente de mysql result
dima l

Uso la siguiente función para reemplazar mysql_result()

function mysqli_result($result, $iRow, $field = 0)
{
    if(!mysqli_data_seek($result, $iRow))
        return false;
    if(!($row = mysqli_fetch_array($result)))
        return false;
    if(!array_key_exists($field, $row))
        return false;
    return $row[$field];
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad