Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 832
Hei, har seg slik at jeg prøver ut PDO. og prøver å spørre databasen etter alle brukerne i den.

den returnerer bare 1 bruker. Vet ikke om det er spørringen min eller måten jeg printer det på som er feil..

Noen tips i rett retning?


Kode

			function print_user(){
				$sql = 'SELECT username FROM users';
				try {
				$statement = $this->db->prepare($sql);
				$statement->execute();
				$result = $statement->fetch(PDO::FETCH_OBJ);
				print "Registered users: </br>";
				foreach ($result as $res) {
				print $res . "</br>";
				}
				}
				catch (PDOException $e) {
						print $e->getMessage();
				}
		}

Resultat

Kode

Registered users: 
darky

Forventet resultat

Kode

Registered users:
Darky
Alakazam
Blablubbloppen
Lille-Freaken-2012
etc..
En ting til. Noen som vet hvorfor PHP_EOL, \n, \r og \r\n ikke fungerer?

Sjekket i navicat. med samme spørring, der får jeg di resultatene jeg vil ha o.O

Dafakk...

Må jeg bruke en annen funksjon en foreach...?
Du bruker funksjonen fetch() som kun henter ut første rad. fetchAll() henter alle rader.

Du bør vise til kode og eventuelle warnings/feilmeldinger for det siste spørsmålet, da det ikke er noen grunn for at det ikke skal fungere.
Carrots for Fun!
darkslayer322's Avatar
Trådstarter
FetchALL gir

Kode

Catchable fatal error: Object of class stdClass could not be converted to string in C:\xampp\htdocs\system\core\login.php on line 193

kode:

Kode

		function print_user(){
				$sql = 'SELECT username FROM users';
				try {
				$statement = $this->db->prepare($sql);
				$statement->execute();
				$result = $statement->fetchALL(PDO::FETCH_OBJ);
				print "Registered users: </br>";
				foreach ($result as $res) {
line 193:       print $res . "</br>";
				}
				}
				catch (PDOException $e) {
						print $e->getMessage();
				}

		}


Databasen er noe slikt

Kode

[ID] [USERNAME] [PASS_HASH] [SALT_HASH]
1    Darky      ********     *******
2    PIE        ********     *******
Fikk fiksa d me den hær kodn


Kode

		function print_user(){
				$sql = 'SELECT * FROM users';
				$statement = $this->db->prepare($sql);
				$statement->execute();
				$stmt = $statement;
				$stmt->setFetchMode(PDO::FETCH_ASSOC);
				while($row = $stmt->fetch())
				{
					print $row['username'] . "<br />";
				}

		}
Selvom du har fiksa det vil jeg gi noen tips. Feilmeldingen du fikk i koden over kommer av at du prøver å skrive ut et objekt som en string (som det står i feilmeldingen). $res er et objekt. Det du skal skrive ut er $res->username.
For utskrift av et helt objekt, i forhold til debugging, kan du bruke var_dump($res).

En enklere og kortere kode:

Kode

function print_user(){ 
	
	$query = $this->db->query('SELECT * FROM users');
	
	$output = '';
	while ($row = $query->fetch(PDO::FETCH_OBJ)) {
		$output .= $row->username . "<br />\n";
	}
	
	echo $output;
}
Man skal på generelt grunnlag ikke bruke echo/print i en loop, da det tar opp en del mer ressurser enn å skrive til en midlertidig variabel.