Resultado único de la base de datos usando mysqli

Resuelto WebStylePress asked hace 54 años • 6 respuestas

Estoy intentando utilizar mySQLi por primera vez. Lo he hecho en el caso del bucle. Se muestran los resultados del bucle, pero me quedo atascado cuando intento mostrar un solo registro. Aquí hay un código de bucle que está funcionando.

<?php
// Connect To DB
$hostname="localhost";
$database="mydbname";
$username="root";
$password="";

$conn = mysqli_connect($hostname, $username, $password, $database);
?>

<?php
$query = "SELECT ssfullname, ssemail FROM userss ORDER BY ssid";
$result = mysqli_query($conn, $query);
$num_results = mysqli_num_rows($result);
?>

<?php
/*Loop through each row and display records */
for($i=0; $i<$num_results; $i++) {
$row = mysqli_fetch_assoc($result);
?>

Name: <?php print $row['ssfullname']; ?>
<br />
Email: <?php print $row['ssemail']; ?>
<br /><br />

<?php 
// end loop
} 
?>

¿Cómo muestro un solo registro, cualquier registro, nombre o correo electrónico, de la primera fila o lo que sea, solo un solo registro, cómo haría eso? En un caso de registro único, considere eliminada toda la parte del bucle anterior y mostremos cualquier registro individual sin bucle.

WebStylePress avatar Jan 01 '70 08:01 WebStylePress
Aceptado

Cuando solo se necesita un resultado, no se debe utilizar ningún bucle. Simplemente busque la fila de inmediato.

  • En caso de que necesites recuperar toda la fila en una matriz asociativa:

      $row = $result->fetch_assoc();
    
  • en caso de que necesite un solo valor:

      //starting from PHP 8.1
      $value = $result->fetch_column();
      // for older versions:
      $value = $result->fetch_row()[0] ?? false;
    

A continuación se muestran ejemplos completos para diferentes casos de uso.

Variables a utilizar en la consulta.

Cuando se van a utilizar variables en la consulta, se debe utilizar una declaración preparada . Por ejemplo, dado que tenemos una variable $id:

PHP >= 8.2

// get a single row
$sql = "SELECT fullname, email FROM users WHERE id=?";
$row = $conn->execute_query($query, [$id])->fetch_assoc();

// just a single value
$sql = "SELECT count(*) FROM users WHERE id=?";
$count = $conn->execute_query($query, [$id])->fetch_column();

Versiones PHP heredadas:

// get a single row
$query = "SELECT fullname, email FROM users WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

// just a single value
$query = "SELECT count(*) FROM userss WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$count = $result->fetch_row()[0] ?? false;

La explicación detallada del proceso anterior se puede encontrar en mi artículo . En cuanto a por qué debes seguirlo, se explica en esta famosa pregunta.

No hay variables en la consulta.

Cuando no se van a utilizar variables en la consulta, se puede utilizar el query()método:

// array
$user = $conn->query("SELECT * FROM users LIMIT 1")->fetch_assoc();
// value
$count = $conn->query("SELECT count(*) FROM users")->fetch_column();
// value < 8.1
$count = $conn->query("SELECT count(*) FROM users")->fetch_row()[0];
Your Common Sense avatar Jan 31 '2013 11:01 Your Common Sense

Usar mysqli_fetch_row(). Prueba esto,

$query = "SELECT ssfullname, ssemail FROM userss WHERE user_id = ".$user_id;
$result = mysqli_query($conn, $query);
$row   = mysqli_fetch_row($result);

$ssfullname = $row['ssfullname'];
$ssemail    = $row['ssemail'];
Edwin Alex avatar Jan 31 '2013 11:01 Edwin Alex

Si asume solo un resultado, puede hacer esto como lo sugiere Edwin utilizando una identificación de usuario específica.

$someUserId = 'abc123';

$stmt = $mysqli->prepare("SELECT ssfullname, ssemail FROM userss WHERE user_id = ?");
$stmt->bind_param('s', $someUserId);

$stmt->execute();

$stmt->bind_result($ssfullname, $ssemail);
$stmt->store_result();
$stmt->fetch();

ChromePhp::log($ssfullname, $ssemail); //log result in chrome if ChromePhp is used.

O como "Tu sentido común", que selecciona solo un usuario.

$stmt = $mysqli->prepare("SELECT ssfullname, ssemail FROM userss ORDER BY ssid LIMIT 1");

$stmt->execute();
$stmt->bind_result($ssfullname, $ssemail);
$stmt->store_result();
$stmt->fetch();

Nada realmente diferente de lo anterior excepto PHP v.5

MFAL avatar Apr 29 '2015 16:04 MFAL

La primera respuesta hará el trabajo, pero en este caso no es necesario repetir el resultado.

$row = $result->fetch_row();

Solo haz eco de la columna

  echo   $row['column']; 

Esto debería funcionar

Ezekiel Arin avatar Jul 22 '2021 21:07 Ezekiel Arin