In mijn ogen is er niets mis met die code, maar is je vps een beetje overwerkt.
- To many connections
-
12-02-2010, 17:43 #16
- Berichten
- 599
- Lid sinds
- 16 Jaar
-
12-02-2010, 17:49 #17
- Berichten
- 169
- Lid sinds
- 17 Jaar
Onderstaande code kan niet de volledige code zijn....
PHP Code:$check = $Sql->query( "SELECT COUNT(1) as id FROM tabel WHERE optie = '" . md5( $variable ) . "'" );
$show = $check->fetch_assoc( );
Daar zul je moeten kijken of er elke keer een nieuwe connectie wordt aangemaakt....
@Ricardo:
Hoe kun jij zien dat er niets mis is met de code. Er wordt in een loop een aantal functies aangeroepen. Daar is op zich niets mis mee.... Maar je weet toch niet hoe die functies zijn opgebouwd?
-
12-02-2010, 18:04 #18
- Berichten
- 442
- Lid sinds
- 16 Jaar
ja je hebt gelijk, ik dacht dat het daar toch niet aan zou liggen maar er
word een bestand geinclude bovenaan die code.
In dit bestand staat het de volgende codes:
PHP Code:$Sql = new mysqli( $data[ 'hostname' ], $data[ 'username' ], $data[ 'password' ], $data[ 'database' ] );
if( mysqli_connect_errno( ) ) {
printf( "Connectie fout: %s\n", mysqli_connect_error( ) );
exit( );
}
-
12-02-2010, 18:07 #19
- Berichten
- 599
- Lid sinds
- 16 Jaar
Aangezien de close pas na de foreach komt ?
Het zou kunnen dat inderdaad in de class nog wat wordt gedaan maar lijkt me sterk.
EDIT: Inderdaad, in die class wordt dus elke keer een nieuwe connectie gemaakt :) Excuses
Onderstaande code kan niet de volledige code zijn....
PHP Code:$check = $Sql->query( "SELECT COUNT(1) as id FROM tabel WHERE optie = '" . md5( $variable ) . "'" );
$show = $check->fetch_assoc( );
Daar zul je moeten kijken of er elke keer een nieuwe connectie wordt aangemaakt....
@Ricardo:
Hoe kun jij zien dat er niets mis is met de code. Er wordt in een loop een aantal functies aangeroepen. Daar is op zich niets mis mee.... Maar je weet toch niet hoe die functies zijn opgebouwd?
-
12-02-2010, 18:24 #20
- Berichten
- 169
- Lid sinds
- 17 Jaar
Probleem is dus duidelijk geworden....
De code moet veranderd worden zodat niet elke keer een nieuwe connectie wordt gemaakt....
De close moet niet in de foreach loop. Het zou wel je probleem oplossen met de connecties.
Het is echter geen efficiente oplossing. Het maken (en sluiten) van de verbinding kost op zichzelf namelijk te veel tijd.
Succes!
-
12-02-2010, 18:47 #21
- Berichten
- 442
- Lid sinds
- 16 Jaar
Oke, bedankt voor alle hulp totnutoe.
Alleen weet ik niet hoe ik dit nu moet doen.
Misschien dat iemand een voorbeeld heeft of mij in de goeie richting stuur?
Ik zou dat enorm waarderen.
Mvg, Ben
Aanvullend bericht:
Op phphulp geven ze deze code in hun voorbeeld met
gebruikt van mysqli.
PHP Code:<?php
$mysqli = new mysqli('host', 'user', 'password', 'database');
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli->error);
}
// Controleren en beveiligen van variabelen
$naam = $mysqli->real_escape_string($_POST['naam'])
$sql = "
UPDATE tabel
SET naam = '".$naam."'
WHERE id = 10
";
if(!$result = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
else
{
if($mysqli->affected_rows > 0)
{
echo 'Het updaten is gelukt';
}
}
?>Laatst aangepast door Ben F. : 13-02-2010 om 04:43 Reden: Automatisch samengevoegd.
-
13-02-2010, 11:27 #22
- Berichten
- 169
- Lid sinds
- 17 Jaar
Ik ben geen OOP specialist... maar wellicht kan dit helpen....
$mysqli = new mysqli('host', 'user', 'password', 'database');
Het gaat om deze code... Elke keer als mysqli wordt aangeroepen, wordt er een nieuwe connectie geopend.
Er zal een controle ingebouwd moeten worden die controleert of er al een connectie is gemaakt. Bijvoorbeeld:
http://stackoverflow.com/questions/4...nection-object
Check ook:
http://www.wmcity.nl/forum_topic.php?id=673007
Ik vind het prima om mee te kijken bij een bepaald probleem om tot een oplossing te komen. Leer ik zelf ook van... Maar ik denk dat je eerst je basiskennis PHP toch ietsie moet opschroeven.
Of iemand inhuren natuurlijk....
-
13-02-2010, 12:06 #23
- Berichten
- 330
- Lid sinds
- 18 Jaar
Op een VPS server heb je vaak volledige toegang tot je database. Hier kan je zien welke processen op het moment worden afgehandeld. Het kan zijn dat je te veel slaap connecties hebt die niet correct zijn afgesloten. Echter is een mysql_close(); in de meeste gevallen overbodig, aangezien een connectie automatisch wordt afgesloten bij het einde van een script.
En vaak is het ook ingesteld dat wanneer een nieuwe connectie wordt aangemaakt en er al een connectie is opgezet, dat de eerste connectie wordt gebruikt voor het afhandelen van de query's en een tweede connectie niet wordt aangemaakt.
Al met al zal ik eens contact opnemen met de webhoster om te vragen of zij deze instellingen kan nakijken.
Edit: En zoals een aantal keer beschreven eenmalig een connectie aanmaken bovenaan de scripting en niet in een loop zetten!!
-
13-02-2010, 16:19 #24
- Berichten
- 442
- Lid sinds
- 16 Jaar
Heb het script aangepast, en het werkt, dus als ik het goed het begrepen zou het op deze manier
veel beter moeten werken.
class_database.php
PHP Code:class database
{
private static $connection = null;
public static function connect($host, $username, $password, $database)
{
if(!is_resource(self::$connection))
{
self::$connection = new mysqli($host, $username, $password, $database);
}
}
public static function get()
{
return self::$connection;
}
}
PHP Code:
include("class_database.php");
$host = "localhost";
$username = "user";
$password = "pass";
$database = "database";
database::connect($host, $username, $password, $database);
Test.php
PHP Code:
include("config.php");
foreach ($tests as $test)
{
//check of die al in database staat
$check = database::get()->query( "SELECT COUNT(1) as id FROM tabel WHERE optie = '" . $test . "'" );
$show = $check->fetch_assoc( );
//zo niet...
if( $show[ 'id' ] == false ) {
//voeg hem toe in het database.
database::get()->query( "INSERT INTO tabel SET optie = '" . $test . "'" );
}
}
-
13-02-2010, 16:49 #25
- Berichten
- 1.053
- Lid sinds
- 17 Jaar
Ja, dat werkt beter. Je hebt nu 1 verbinding per request nodig. In principe had dat bij methode twee ook gewoon gekunt (misschien is het zelfs wel zo). Maar wat eerder geoppert is, ga monitoren, ga kijken welke processen nog open staan etc.
-
13-02-2010, 16:51 #26
- Berichten
- 169
- Lid sinds
- 17 Jaar
Ik kan het als niet-OOP-programmeur moeilijk beoordelen...
Maar hetvolgende lijkt de oplossing van het connectieprobleem:
if(!is_resource(self::$connection))
{
self::$connection = new mysqli($host, $username, $password, $database);
}
Voordat er een nieuwe connectie wordt gemaakt, wordt er gecontroleerd of er al een connectie is gemaakt.
Dus voor zover ik kan zien is het een goede oplossing!
Heb je de max_connections teruggeschroefd? Neem aan dat het probleem nu niet meer voorkomt?
-
13-02-2010, 16:54 #27
- Berichten
- 442
- Lid sinds
- 16 Jaar
Ja max_connections heb ik weg gehaald dus die staat weer op standaard 100.
Bedankt voor alle hulp.
-
13-02-2010, 17:20 #28
- Berichten
- 169
- Lid sinds
- 17 Jaar
graag gedaan
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic