UPDATE 2:
Ist dies also das optimierteste, das es bekommen kann?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
UPDATE 1:
Ich weiß, dass ich der SQL-Abfrage ein Limit hinzufügen kann, aber ich möchte auch die foreach-Schleife entfernen, die ich nicht benötigen sollte.
URSPRÜNGLICHE FRAGE:
Ich habe das folgende Skript, das IMO für die Rückgabe vieler Zeilen aus der Datenbank aufgrund des Abschnitts "foreach" gut ist.
Wie optimiere ich das, wenn ich weiß, dass ich immer nur 1 Zeile aus der Datenbank bekomme? Wenn ich weiß, dass ich immer nur 1 Zeile aus der Datenbank erhalten werde, verstehe ich nicht, warum ich die foreach-Schleife benötige, aber ich weiß nicht, wie ich den Code ändern soll.
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetchAll();
foreach( $result as $row ) {
echo $row["figure"];
}
$DBH = null;
$STH - $DBH -> prepare
sollte$STH = $DBH -> prepare
mehrere Stellen auf dieser Seite sein.Antworten:
Einfach holen. bekommt nur eine Zeile. Es wird also keine foreach-Schleife benötigt: D.
Beispiel (ty northkildonan):
quelle
$dbh = new PDO(" --- connection string --- "); $stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); $stmt->execute(); $row = $stmt->fetch();
fetch(PDO::FETCH_ASSOC)
schneidet das zurückgegebene Array in zwei Hälften, wenn Sie nur ein Schlüsselwert-Array benötigen.LIMIT 1
ganze Zeit? Zu wissen, dass Sie einenUNIQUE
Wert auswählen, fällt Ihnen ein .Sie können Fetch und LIMIT zusammen verwenden. LIMIT hat zur Folge, dass die Datenbank nur einen Eintrag zurückgibt, sodass PHP sehr wenig Daten verarbeiten muss. Mit fetch erhalten Sie den ersten (und einzigen) Ergebniseintrag aus der Datenbankantwort.
Sie können weitere Optimierungen vornehmen, indem Sie den Abruftyp festlegen (siehe http://www.php.net/manual/de/pdostatement.fetch.php) . Wenn Sie nur über Spaltennamen darauf zugreifen, müssen Sie das Array nummerieren.
Beachten Sie die ORDER-Klausel. Verwenden Sie ORDER oder WHERE, um die gewünschte Zeile zu erhalten. Andernfalls erhalten Sie die erste Zeile in der Tabelle zu jeder Zeit.
quelle
Hast du versucht:
quelle
$row = $DBH->query($query)->fetch()['figure']
. Wennfetch
zurückgegeben wird,false
weil keine Ergebnisse vorliegen, ignoriert PHP die ungültige Schlüsselreferenz stillschweigend. Wenn etwas schief gehtquery
, abhängig davon, wie Sie Ihre Fehlerbehandlung eingerichtet haben, wird entweder eine Ausnahme ausgelöst (meiner Meinung nach erwünscht) oder Sie erhalten einenInvalid object method reference "fetch" on "false"....
Fehler, dessen Form Sie ohnehin erhalten hätten, weil Die Abfrage ist offensichtlich fehlgeschlagen.Wenn Sie nur ein einzelnes Feld möchten, können Sie fetchColumn anstelle von fetch verwenden - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
quelle
Sie können dies für eine Datenbank-SELECT-Abfrage versuchen, die auf Benutzereingaben mit PDO basiert:
quelle
Wie wäre es mit
limit 0,1
für MySQL-Optimierungund über Ihren Code:
quelle
Dank des Vorschlags von Steven, fetchColumn zu verwenden, ist hier meine Empfehlung, eine Zeile aus Ihrem Code herauszuschneiden.
quelle