Database benaderen met php | SQL & queries

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

04/03/2016 22:28:58
Quote Anchor link
Beste mensen van dit prachtige forum,

Ik probeer te communiceren met een (localhost) database met php.
Tot nu toe werkt alles, dat is het probleem niet.
Waar ik mee zit is dat ik een aantal dingen niet begrijp.

De code spreekt voorzich en werkt goed.

Wat ik geprobeerd heb:
- zoeken op internet, phpmanual, stackoverflow en zelfs w3schools.
Helaas heeft dit niet veel opgeleverd en ik wil alles in een keer goed leren zodat ik niet halverwege de rit overnieuw moet beginnen.

Wat ik niet begrijp is/zijn:
- $result, ik had begrepen dat het een soort van array is maar meer kan ik er niet uit opmaken
- hoe komen we in een keer aan $row, die variable is toch nergens gedeclareerd, hetzelfde voor $result?
- Wat doet fetch_assoc, een method van het $result object.

Sorry als deze vraag veel te simpel is en zeg het vooral als ik even 'back to basic' moet, dat is geen probleem.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  $db = new mysqli('localhost', 'root', '', 'testDB');

  if ($db->connect_errno > 0) {
    die('Unable to connect to the dababase [' . $db->connect_error . ']');
  }

  $sql = "SELECT name FROM users";

  if (!$result = $db->query($sql)) {
    die('There was an error running the query [' . $db->error . ']');
  }

  while ($row = $result->fetch_assoc()) {
    echo $row['name'] . '<br>';
  }

[/CODE]
Gewijzigd op 04/03/2016 22:30:10 door
 
PHP hulp

PHP hulp

16/11/2024 02:48:57
 
Thomas van den Heuvel

Thomas van den Heuvel

05/03/2016 14:31:41
Quote Anchor link
* $result, ik had begrepen dat het een soort van array is maar meer kan ik er niet uit opmaken
Voor dit soort zaken is het in het algemeen handig wanneer je leert php.net te raadplegen. En ook dat je leert code te "lezen". $result is het resultaat van een toekenning. De waarde die wordt toegekend is de return-waarde van (mysqli_)query(). Deze waarde is ofwel false indien de query mislukte, ofwel een object van de mysqli_result klasse. Heel kort door de bocht zou je dit object als een "normale" variabele kunnen zien met extra functionaliteit. Een van de voornaamste eigenschappen van dit object is dat deze intern een soort van verwijzing heeft naar de lijst van resultaten van je query (mits deze succesvol was). Via dit object kun je deze resultaten stuk voor stuk ophalen.

* hoe komen we in een keer aan $row, die variable is toch nergens gedeclareerd, hetzelfde voor $result?
Zoals in een andere thread al was aangegeven (ook een vraag van jou geloof ik) kunnen variabelen on-the-fly worden gedeclareerd. Zo ook $result en $row.

* Wat doet fetch_assoc, een method van het $result object.
Zoals eerder aangegeven kun je met $result (een object van de klasse mysqli_result) resultaten ophalen. (mysqli_)fetch_assoc() is simpelweg een van de manieren waarop je dit kunt doen. In dit geval wordt de data geretourneerd (gefetched) als een associatief array, oftewel een array van key-value paren, waarbij de key de tabelkolomnaam bevat en de value de waarde van die bijbehorende kolom.

Je bent hier tegelijkertijd met een aantal concepten bezig (databases en object georienteerd programmeren). Hierbij wordt een zekere basis (voor)kennis verondersteld. Maar het klinkt alsof je daar nog niet alle puzzelstukjes op zijn plek hebt gelegd. Dit alles bij elkaar is dan waarschijnlijk moeilijk te begrijpen inderdaad...
Gewijzigd op 05/03/2016 14:33:35 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/03/2016 22:17:49
Quote Anchor link
In aanvulling op de zeer goede uitleg van Thomas:

Expliciet declareren van de variabelen is in PHP niet nodig. Het toekennen van een waarde aan een variabele echter wel voordat je iets kan doen met deze variabele. Omdat functies een waarde kunnen teruggeven (return) kun je dus ook een functie aanroepen om een waarde aan een variabele toe te kennen.
Edit: Niet alle functies geven een waarde terug. Het beste is om in de documentatie te kijken. Op php.net staan alle functies die standaard aanwezig zijn beschreven. Onder het kopje "Return Values" staat wat een functie allemaal terug zou kunnen geven

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$a
= 'PHP is leuk';

// hetzelfde bereik je met:

function whatIsPHP()
{

    return 'PHP is leuk';
}


$a = whatIsPHP();
?>


Dit gebeurt ook in jouw script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$row
= $result->fetch_assoc();
?>



Waarom moeten we eerst fetchen en krijgen we niet direct een array met rows terug van Mysqli::Query() ?

Stel je voor je hebt een tabel met 5 miljoen rijen. De totale omvang van de tabel is 95MB. De MySQL-server staat niet op dezelfde machine als het PHP script.

Als je nu deze query doet: "SELECT * FROM users". Dan krijg je in één klap 95MB data terug van de MySQL-server als Mysqli::Query() alle data in één keer terug zou geven. Dit kan je server platleggen of onnodig traag maken. Bovendien heb je dit in geen geval nodig omdat je toch per rij iets wilt gaan doen, bijvoorbeeld weergeven op een webpagina. Daarom gebruik je fetch_assoc (het liefst) om telkens één rij op te halen. (Die al op je staat te wachten in een buffer).

Je kunt het in gedachten misschien wel vergelijken met Youtube. Je geeft eerst aan Welke video je wilt zien. Daarna wordt in vele stappen de video stukje voor stukje naar je browser gestuurd. We noemen dit dan streamen.
Gewijzigd op 06/03/2016 11:56:47 door Frank Nietbelangrijk
 

06/03/2016 15:17:06
Quote Anchor link
Ik weet niet of ik hier eerder een thread over gemaakt heb, kan zijn van wel maar toen wist ik veel minder van php en sql. Dat zal dan ook een tijdje geleden zijn.
Bedankt, dit zal zeker helpen.

Toevoeging op 06/03/2016 15:21:12:

Thomas van den Heuvel op 05/03/2016 14:31:41:
Je bent hier tegelijkertijd met een aantal concepten bezig (databases en object georienteerd programmeren). Hierbij wordt een zekere basis (voor)kennis verondersteld. Maar het klinkt alsof je daar nog niet alle puzzelstukjes op zijn plek hebt gelegd. Dit alles bij elkaar is dan waarschijnlijk moeilijk te begrijpen inderdaad...


Dat klopt, ik begrijp oop nog niet helemaal. Ben er een tijdje terug mee begonnen.
Ik volg een tutorial gemaakt op deze website en ben op het moment hier terechtgekomen.

Op een gegeven moment komen hier databases en mysql in voor, vandaar dat ik deze vraag dus hier gesteld heb. Nog bedankt voor de hulp.
Gewijzigd op 06/03/2016 15:21:53 door
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.