Einzelnes Ergebnis aus der Datenbank mit mysqli

Lesezeit: 6 Minuten

Einzelnes Ergebnis aus der Datenbank mit mysqli
Hiroshi Rana

Ich versuche zum ersten Mal mySQLi zu verwenden. Ich habe es im Fall der Schleife getan. Schleifenergebnisse werden angezeigt, aber ich stecke fest, wenn ich versuche, einen einzelnen Datensatz anzuzeigen. Hier ist Schleifencode, der funktioniert.

<?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
} 
?>

Wie zeige ich einen einzelnen Datensatz, jeden Datensatz, Namen oder E-Mail, aus der ersten Zeile oder was auch immer, nur einen einzelnen Datensatz, wie würde ich das machen? Betrachten Sie in einem Fall mit einem einzelnen Datensatz den gesamten obigen Schleifenteil als entfernt und lassen Sie uns einen einzelnen Datensatz ohne Schleife zeigen.

  • …ORDER BY ssid LIMIT 1 also entfernen for($i = ..){}

    Benutzer1646111

    31. Januar 2013 um 11:22 Uhr


  • Eigentlich möchte ich den Schleifenteil entfernen und ohne Einschränkung möchte ich einen Datensatz mit der Abfrage erhalten, um einen einzelnen Datensatz anzuzeigen.

    – Hiroshi Rana

    31. Januar 2013 um 11:24 Uhr

Einzelnes Ergebnis aus der Datenbank mit mysqli
Ihr gesunder Menschenverstand

Wenn nur ein einziges Ergebnis benötigt wird, sollte keine Schleife verwendet werden. Einfach gleich die Reihe holen.

  • Falls Sie die gesamte Zeile in ein assoziatives Array abrufen müssen:

      $row = $result->fetch_assoc();
    
  • falls Sie nur einen einzigen Wert benötigen

      $row = $result->fetch_row();
      $value = $row[0] ?? false;
    

Das letzte Beispiel gibt die erste Spalte aus der ersten zurückgegebenen Zeile oder zurück false wenn keine Zeile zurückgegeben wurde. Es kann auch auf eine einzelne Zeile gekürzt werden,

$value = $result->fetch_row()[0] ?? false;

Nachfolgend finden Sie vollständige Beispiele für verschiedene Anwendungsfälle

In der Abfrage zu verwendende Variablen

Wenn Variablen in der Abfrage verwendet werden sollen, dann a vorbereitete Aussage muss benutzt werden. Angenommen, wir haben eine Variable $id:

$query = "SELECT ssfullname, ssemail FROM userss WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

// in case you need 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();
$value = $result->fetch_row()[0] ?? false;

Die detaillierte Erklärung des obigen Prozesses finden Sie in meiner Artikel. Warum Sie ihm folgen müssen, wird in dieser berühmten Frage erklärt

Keine Variablen in der Abfrage

In Ihrem Fall, wo keine Variablen in der Abfrage verwendet werden sollen, können Sie die verwenden query() Methode:

$query = "SELECT ssfullname, ssemail FROM userss ORDER BY ssid";
$result = $conn->query($query);
// in case you need an array
$row = $result->fetch_assoc();
// OR in case you need just a single value
$value = $result->fetch_row()[0] ?? false;

Übrigens, obwohl die Verwendung der Raw-API während des Lernens in Ordnung ist, sollten Sie in Zukunft eine Datenbankabstraktionsbibliothek oder zumindest eine Hilfsfunktion verwenden:

// using a helper function
$sql = "SELECT email FROM users WHERE id=?";
$value = prepared_select($conn, $sql, [$id])->fetch_row[0] ?? false;

// using a database helper class
$email = $db->getCol("SELECT email FROM users WHERE id=?", [$id]);

Wie Sie sehen können, kann eine Hilfsfunktion zwar die Codemenge reduzieren, aber die Methode einer Klasse könnte den gesamten sich wiederholenden Code darin kapseln, sodass Sie nur sinnvolle Teile schreiben müssen – die Abfrage, die Eingabeparameter und das gewünschte Ergebnisformat (in der Form des Methodennamens).

  • Ja, das ist objektorientierte Programmierung. Es macht mir Angst, weil es schwierig erscheint. Aber ich will es unbedingt lernen. Bitte empfehlen Sie einen Ort / eine Quelle, wo ich etwas über Klassen und die Verwendung von Klassen und Objekten usw. erfahren kann.

    – Hiroshi Rana

    31. Januar 2013 um 11:57 Uhr

  • Sie müssen OOP nur dazu kennen schreiben Klassen. Ihre Verwendung erfordert zwar keine besonderen Kenntnisse, ist aber so einfach wie das Aufrufen einer regulären Funktion. Der einzige Unterschied ist ein kleines Präfix $class-> vor dem Funktionsnamen. Der Rest ist gleich.

    – Ihr gesunder Menschenverstand

    31. Januar 2013 um 12:01 Uhr

Einzelnes Ergebnis aus der Datenbank mit mysqli
Edwin Alex

Verwenden mysqli_fetch_row(). Versuche dies,

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

  • Mit mysqli_fetch_row ist das nicht möglich, da es ein aufgezähltes Array zurückgibt. Ex: $row[0], $row[1] Sie müssen mysqli_fetch_assoc verwenden, das ein assoziatives Array zurückgibt, wenn Sie Feldnamen angeben möchten. Ex: $row['ssfullname'];

    – Eisenarm

    23. Mai 2019 um 20:35 Uhr


Wenn Sie nur ein Ergebnis annehmen, können Sie dies wie in Edwin vorgeschlagen tun, indem Sie eine bestimmte Benutzer-ID verwenden.

$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.

ODER als “Ihr gesunder Menschenverstand”, der nur einen Benutzer auswählt.

$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();

Nichts wirklich anders als oben, außer für PHP v.5

1647288848 210 Einzelnes Ergebnis aus der Datenbank mit mysqli
Suhad al-Dulaimy

Anstatt zu verwenden $row = $query->fetch(); versuchen zu benutzen:

$result = $query->get_result();
$row=$result->fetch_assoc();

Sie können jedes Mal überprüfen, ob Sie Daten aus MySQL-Tabellen erhalten, indem Sie sie anzeigen mit:

var_export( $row['put your column name here'] );

Die erste Antwort erledigt die Aufgabe, aber in diesem Fall müssen Sie das Ergebnis nicht wiederholen.

$row = $result->fetch_row();

Wiederholen Sie einfach die Spalte

  echo   $row['column']; 

Dies sollte den Zweck erfüllen

1647288848 439 Einzelnes Ergebnis aus der Datenbank mit mysqli
Dharman

Ab PHP 8.1, mysqli_result::fetch_column() ist verfügbar

Sie können verwenden mysqli_result::fetch_column() um einen einzelnen Skalarwert aus der Ergebnismenge abzurufen.

Die neue Methode akzeptiert die 0-basierte Position der Spalte, die Sie lesen möchten. Der Standardwert ist 0.

$query = "SELECT ssfullname, ssemail FROM userss WHERE ud=?";
$stmt = $conn->prepare($query);
$stmt->execute([$id])
$result = $stmt->get_result();
$ssemail = $result->fetch_column(1);

Beachten Sie, dass diese Methode den internen Zeiger genau wie die andere zur nächsten Zeile bewegt fetch_* Methoden tun. Wenn es das Ende erreicht, kehrt es zurück false. Daher sollten Sie im obigen Beispiel besser verwenden fetch_assoc() um die gesamte Zeile in ein Array zu holen.

Es kann auch mit verwendet werden mysqli::query() für SQL-Anweisungen ohne Parameter.

$query = "SELECT count(*) FROM userss";
$count = $conn->query($query)->fetch_column();

1003020cookie-checkEinzelnes Ergebnis aus der Datenbank mit mysqli

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy