[PHP/MYSQL]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Even een paar vraagjes.

code:
1
2
$query = "hier een query;";
$result = mysql_query($query) or die (mysql_error());


Als ik deze code uitvoer dan krijgt $result een resource id als waarde.

(1) Wat is zo'n resource precies?

Op php.net staat dat het een speciaal soort variabele is die verwijst naar een externe gegevensbron. Maar dat zegt me heel weinig. Wanneer de query uitgevoerd wordt, wordt de gevonden subset dan ergens tijdelijk opgeslagen?

(2) Wat gebeurd er als ik zo'n resource aanspreek?

Als ik de resource aanspreek met bijvoorbeeld mysql_fetch_row($result) wat wordt er dan precies aangesproken? Wordt de database dan opnieuw benaderd? Of staat die subset dan ergens opgeslagen?

(3) Stel ik wil de resultaten van een query meerdere malen gebruiken. Is het dan handig te resultaten eerst naar een array o.i.d te schrijven en die array aan te spreken i.p.v. die resource? i.v.m de belasting van de server/database.

** ai, ik ben een titel vergeten. Hoe wijzig ik dit?

Acties:
  • 0 Henk 'm!

  • Alex Picard
  • Registratie: November 2005
  • Laatst online: 04-09 11:25
Je kan door middel van
PHP:
1
2
3
while ($row = mysql_fetch_iets($result)) {
    // doe iets met de $row
}

waarbij je iets kan vervangen door row of array (php.net),
Telkens een rij uit de query verwerken. Je kan elke rij maar eenmaal "ophalen" uit de resource.

edit:
Hier zijn ook veel tutorials over te vinden... google naar php mysql

[ Voor 13% gewijzigd door Alex Picard op 19-06-2007 20:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dit vereist wat kennis van de 3rd party libraries. Zo'n "resource" is in principe een pointer naar een stukje data voor die 3rd party library. In het geval van de mysqlclient library is dat een connectie, een result, een field of een row. Binnen PHP zelf kun je er op zich niets mee, maar deze gegevens moeten wel bij elke function call die gebruik maakt van de data beschikbaar zijn, daarom zul je bij dergelijke functies een resource mee moeten geven als eerste argument.

Bij de mysqlclient library worden er inderdaad results, fields en rows opgeslagen bij het uitvoeren van een query, als die relevant is.

De PHP developers zijn een beetje lui, daarom doen ze echt alleen het absolute minimum om een bepaalde library aan te kunnen spreken, en daarom moet je zelf heel wat schrijven wil je echt nuttig gebruik kunnen maken van de functies.

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij is het zo dat het antwoord van de database door PHP volledig wordt opgeslagen in $result, vervolgens kan je zonder tussenkomst van de database deze gegevens op allerlei manieren gebruiken, mysql_fetch_assoc, mysql_num_rows, etc. etc.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Alex Picard schreef op dinsdag 19 juni 2007 @ 19:57:
Je kan door middel van
PHP:
1
2
3
while ($row = mysql_fetch_iets($result)) {
    // doe iets met de $row
}

waarbij je iets kan vervangen door row of array (php.net),
Telkens een rij uit de query verwerken. Je kan elke rij maar eenmaal "ophalen" uit de resource.

edit:
Hier zijn ook veel tutorials over te vinden... google naar php mysql
Weet je dat zeker?

Volgens mij kan je met behulp van data_seek($result, 0) je pointer terug zetten en een zelfde rij nogmaals opvragen.

[ Voor 63% gewijzigd door Verwijderd op 19-06-2007 20:01 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Bekijk anders de C API, dan krijg je wellicht inzicht in wat er onder water gebeurt, de functies lijken sterk op de PHP functies, omdat de implementatie op een luie manier is gedaan.

Als je functies gaat vergelijken, zie je dat waar in de C API een MYSQL, MYSQL_RES, MYSQL_ROW of MYSQL_FIELD wordt gebruikt, in de PHP API een resource wordt doorgegeven. Die resource zal in principe een pointer zijn naar de "private data", waar je binnen PHP niets mee kunt, maar de libraries zullen die data doorkrijgen.

[ Voor 42% gewijzigd door Verwijderd op 19-06-2007 20:06 ]


Acties:
  • 0 Henk 'm!

  • Alex Picard
  • Registratie: November 2005
  • Laatst online: 04-09 11:25
Verwijderd schreef op dinsdag 19 juni 2007 @ 20:00:
[...]


Weet je dat zeker?

Volgens mij kan je met behulp van data_seek($result, 0) je pointer terug zetten en een zelfde rij nogmaals opvragen.
Bijna goed:
bool mysql_data_seek ( resource $result_identifier, int $row_number )

Geeft TRUE terug bij succes, FALSE indien er een fout is opgetreden.

mysql_data_seek() verplaatst de interne rij pointer van de MySQL resultaat set die geassocieerd is met de gegeven result identifier naar het gespecificeerde rijnummer. De volgende keer dat mysql_fetch_row() wordt aangeroepen zal die rij teruggegeven worden.

Row_number begint bij 0. The row_number is een waarde in het bereik van 0 tot mysql_num_rows - 1.
Bedankt voor de tip!
Pagina: 1