Resultado único de la base de datos usando mysqli
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.
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];
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'];
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
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