57 Stimmen

Einfacher Weg zum Lesen einzelner Datensätze aus MySQL

Wie kann ich mit PHP am besten einen einzelnen Datensatz aus einer MySQL-Datenbank auslesen? Z.B.:

SELECT id FROM games

Ich habe versucht, eine Antwort in den alten Fragen zu finden, hatte aber kein Glück.

6 Stimmen

"SELECT id FROM games" gibt zurück todo Aufzeichnungen. Wenn Sie alle möglichen Werte aus einem Feld (id) haben wollen, sind die folgenden Antworten richtig. Wenn Sie nur eine Zeile benötigen, müssen Sie eine WHERE-Klausel zu Ihrer SQL-Anweisung hinzufügen.

56voto

Dan Grossman Punkte 50597
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);

4 Stimmen

Dies war in PHP 5.5.0 veraltet und wurde in PHP 7.0.0 entfernt.

31voto

$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database_name', $link);
$sql = 'SELECT id FROM games LIMIT 1';
$result = mysql_query($sql, $link) or die(mysql_error());
$row = mysql_fetch_assoc($result);
print_r($row);

In ChrisADs Antwort fehlten einige Dinge. Nach der Verbindung zu mysql ist es wichtig, die Datenbank auszuwählen und auch die() Anweisung können Sie Fehler erkennen, wenn sie auftreten.

Seien Sie vorsichtig, es funktioniert nur, wenn Sie 1 Datensatz in der Datenbank haben, weil Sie sonst hinzufügen müssen WHERE id=xx oder etwas Ähnliches zu erhalten nur eine Zeile und nicht mehr. Sie können auch auf Ihre ID zugreifen wie $row['id']

22voto

Tom Haigh Punkte 56080

Verwendung von PDO könnte man etwa so vorgehen:

$db = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');

$stmt = $db->query('select id from games where ...');
$id = $stmt->fetchColumn(0);
if ($id !== false) {
    echo $id;
}

Sie sollten natürlich auch prüfen, ob PDO::query() führt die Abfrage OK aus (entweder durch Überprüfung des Ergebnisses oder durch Anweisung an PDO, stattdessen Ausnahmen zu werfen)

0 Stimmen

Und natürlich erhalten Sie alle 10.000 Spiele aus der Datenbank auf einmal. Siehe meine Antwort unten zu WHERE und LIMIT.

1 Stimmen

Nein, ich bin nicht que aufgeregt darüber, es ist nur die Begrenzung auf 15 Zeichen, die mich dazu gebracht hat :P

15voto

prl77 Punkte 665

Unter der Annahme, dass Sie einen automatisch inkrementierenden Primärschlüssel verwenden, was die normale Vorgehensweise ist, können Sie auf den Schlüsselwert der letzten Zeile zugreifen, die Sie in die Datenbank eingegeben haben:

$userID = mysqli_insert_id($link);

Andernfalls müssen Sie genauere Angaben zu der gesuchten Zeile machen, z. B. die E-Mail-Adresse. Ohne Ihre Tabellenstruktur zu kennen, können wir keine genaueren Angaben machen.

In jedem Fall sollten Sie Ihre SELECT Abfrage, verwenden Sie eine WHERE Anweisung wie diese: (Allgemeines Beispiel)

$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE something = 'unique'"));
$userID = $getID['userID'];

(Konkretes Beispiel) Oder ein konkreteres Beispiel:

$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE userID = 1"));
$userID = $getID['userID'];

9voto

Robert K Punkte 29416

Warnung! Ihr SQL ist keine gute Idee, denn es wählt alle Zeilen aus (keine WHERE-Klausel setzt "WHERE 1" voraus!) und verstopft Ihre Anwendung, wenn Sie eine große Anzahl von Zeilen haben. (Wozu 1.000 Zeilen auswählen, wenn 1 genügt?) Wenn Sie also nur eine Zeile auswählen, müssen Sie die LIMIT-Klausel angeben:

$sql = "SELECT id FROM games LIMIT 1";  // Select ONLY one, instead of all
$result = $db->query($sql);
$row = $result->fetch_assoc();
echo 'Game ID: '.$row['id'];

Dieser Unterschied erfordert, dass MySQL die nur der erste übereinstimmende Datensatz, daher ist es wichtig, die Tabelle zu ordnen, oder Sie sollten eine WHERE-Klausel verwenden. Es braucht jedoch viel weniger Speicherplatz und Zeit, diesen einen Datensatz zu finden, als jeden Datensatz abzurufen und Zeile Nummer eins auszugeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X