
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?
sé 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'];
}

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

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
.

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.

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)]:''));
}

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