Investigator (12.12.2018)
-
05.02.2016, 11:05 #1
MySQL bestimmte Zeile auslesen
Moin moin,
ich weiß nicht wieso, aber es gelingt mir einfach nicht, eine einzelne Zeile aus der Datenbank auszugeben:
PHP-Code:<?php
$pdo = new PDO("mysql:host=localhost;dbname=Onlineshop", "root", "root");
$sql = "SELECT * FROM users WHERE id = 1";
$user = $pdo->query($sql);
echo $user["vorname"];
?>
PHP Fatal error: Cannot use object of type PDOStatement as array in line 5
PHP-Code:$pdo = new PDO("mysql:host=localhost;dbname=Onlineshop", "root", "root");
$sql = "SELECT * FROM users WHERE 1";
foreach ($pdo->query($sql) as $user){
echo $user["vorname"];
}
LgGeändert von Negok (08.02.2016 um 07:44 Uhr)
Mfg
.\
-
The Following User Says Thank You to Negok For This Useful Post:
-
05.02.2016, 15:52 #2
- Registriert seit
- 02.01.2013
- Beiträge
- 879
Thanked 458 Times in 313 PostsAW: MySQL bestimmte Zeile auslesen
Ich kann kein PHP, kann mir aber denken, wo das Problem liegt. Ergibt nicht $pdo->query($sql) eine Liste von Arrays (oder ein Array von Arrays)? Müsste doch, weil es ja mehrere Ergebnisse geben könnte. Wenn es nur ein Ergebnis gibt, ist es immer noch eine Liste (Array), allerdings mit nur einem Eintrag. Im $user["vorname"] ist aber nicht angegeben, welches Listenelement genommen werden soll... nämlich das erste. Auch bei Listen mit nur einem Element muß man angeben, welches Element man meint, jedenfalls in anderen Programmiersprachen, und es würde mich wundern, wenn das in PHP nicht so ist. Im zweiten Codebeispiel enthält $user keine Liste(Array) von Arrays mehr, denn das Foreach zerpflückt ja die Liste und weist dem $user einzelne Arrays zu (einzelne Ergebniszeilen). $user["vorname"] kann dann problemlos funktionieren, weil $user keine Liste(Array) von Arrays mehr ist, sondern nur noch ein Array (nämlich die Spalten eines Ergebnisses).
Ich kenne wie gesagt PHP nicht, und weiß nicht, wie man das erste Element einer Liste adressiert... oder ob es überhaupt Listen gibt. Wenn Listen nur Arrays sind, dann musst Du im ersten Beispiel nur angeben, daß Du den ersten Arrayeintrag in $user adressieren willst. In anderen Sprachen wäre das so etwas wie:
echo user[0].vornameGeändert von freulein (05.02.2016 um 15:59 Uhr)
-
The Following 2 Users Say Thank You to freulein For This Useful Post:
Investigator (12.12.2018), Negok (10.02.2016)
-
05.02.2016, 18:30 #3
- Registriert seit
- 24.11.2011
- Beiträge
- 207
Thanked 114 Times in 71 PostsAW: MySQL bestimmte Zeile auslesen
Suchst du evtl. das hier:
PHP-Code:<?php
$pdo = new PDO('mysql:host=localhost;dbname=onlineshop', 'root', 'PASSWORT');
$sql = "SELECT * FROM users WHERE id = 1";
foreach ($pdo->query($sql) as $row) {
echo $row['vorname']."<br />";
}
?>Geändert von Suchty (05.02.2016 um 18:30 Uhr)
Kontakt:
Kein Anschluss unter diesem Nick!
-
The Following User Says Thank You to Suchty For This Useful Post:
Investigator (12.12.2018)
-
06.02.2016, 13:06 #4
- Registriert seit
- 15.11.2011
- Beiträge
- 7.821
- Blog Entries
- 5
Thanked 9.354 Times in 3.194 PostsAW: MySQL bestimmte Zeile auslesen
Dein Beispiel ist bereits vom Syntax her nicht valide, am Ende des DSN-Strings fehlt das schließende doppelte Anführungszeichen. Ich vermute aber mal das ist ein Tippfehler in diesem Beispiel, denn in dem Fall würde PHP das Script abbrechen.
Das Verhalten deines Codes ist weniger verwunderlich: query() scheint mir eher zum Ausführen einer Abfrage ohne Rückgabewert gedacht zu sein, wie das bei der äquivalenten Funktion des MySQLi-Treibers der Fall ist. Ein Blick in die Dokumentation bestätigt dies, da kein assoziatives Array der Abfrageergebnisse sondern ein PDOStatement-Objekt zurückgegeben wird:
PHP-Code:$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "");
$sql = "SELECT * FROM user WHERE userid = 1";
var_dump($pdo->query($sql));
Code:object(PDOStatement)#2 (1) { ["queryString"]=> string(35) "SELECT * FROM user WHERE userid = 1" }
Code:array(222) { ["userid"]=> string(1) "1" [0]=> string(1) "1" ["avatarid"]=> string(2) "3" [...] );
Beispiel:
PHP-Code:$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "");
$sql = "SELECT * FROM user WHERE userid = 1";
$statement = $pdo->prepare($sql);
$statement->execute();
$users = $statement->fetchAll(PDO::FETCH_ASSOC);
print_r($users);
Code:Array ( [0] => Array ( [userid] => 1 [avatarid] => 3 [...] ) )
Code:Array ( [userid] => 1 [avatarid] => 3 )
-
The Following 2 Users Say Thank You to DMW007 For This Useful Post:
Investigator (12.12.2018), Negok (10.02.2016)
-
08.02.2016, 09:08 #5
AW: MySQL bestimmte Zeile auslesen
@Suchty
Klappt so natürlich - jedoch habe ich angenommen, dass es auch irgendwie ohne Schleife gehen muss, wenn man eh nur ein Ergebnis erhalten sollte.. :- )
Ich glaube, unsere beiden Beispiele haben wir von folgender Seite: MySQL SELECT komplexe Datenabfragen - MySQL Tutorial - PHP & MySQL lernen
Direkt unter dem ersten Code-Beispiel steht denn auch:
Hier können wir auch auf die foreach-Schleife verzichten, da wir nur einen Datensatz zurückerhalten und es alternativ wie folgt schreiben. [...]
@DMW007:
Den Tippfehler habe ich korrigiert, sorry! Danke für deine Tipps und die hilfreiche Beschreibung! Von den prepared Statements und dem Vortel ggü. Injections habe ich auch schon gelesen, hielt ich vorrangig aber erst mal für nicht notwendig..... Falsch gedacht!
@fräulein
In Verbindung mit prepared Satements, wie von DMW007 vorgeschlagen, klappt dein Ansatz über eine weitere Indexierung - danke!Geändert von Negok (08.02.2016 um 10:39 Uhr)
Mfg
.\
-
The Following User Says Thank You to Negok For This Useful Post:
Investigator (12.12.2018)
Ähnliche Themen
-
Xampp Service mysql is not installed Service mysql is not started
Von Essah im Forum WebentwicklungAntworten: 8Letzter Beitrag: 22.03.2014, 22:57 -
Ausgewählte Zeile mit Tastenkombination markieren?
Von x BoooM x im Forum Internet und TechnikAntworten: 2Letzter Beitrag: 30.11.2013, 16:03 -
[SQL] Jede zweite Zeile ausgeben !
Von Saad im Forum AndereAntworten: 3Letzter Beitrag: 13.09.2013, 11:21 -
VB.Net Richtextbox einzelne Zeile Leerzeichen entfernen
Von One Way im Forum .NetAntworten: 0Letzter Beitrag: 10.03.2013, 18:05 -
VB.Net Captcha aus Quelltext Zeile auslesen
Von rVs14 im Forum .NetAntworten: 9Letzter Beitrag: 06.04.2012, 21:31
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.