MySQL overhead probleem
Hallo,
ik heb een probleem met MYSQL. Ik heb een simpel CMS welke tekst (HTML) opslaat in een Database dmv. het insert commando. Heel normaal dus, alles werkt ook perfect alleen nou wordt telkens 1 rij na een paar uur weer automatisch verwijderd. Kijk ik in PHPMyadmin dan zie ik hier overhead van 808 bytes. Als ik de tabel optimaliseer is de overhead weg, dan voer ik weer opnieuw de gegevens van de row in en er is dan geen overhead. Pas na een paar uur flushed mysql de row en krijg ik weer overhead. Het vreemde is dat ie het steeds bij 1 row doet, de andere rows zijn wel goed.
Heeft iemand een idee waar dit aan kan liggen?
ik heb een probleem met MYSQL. Ik heb een simpel CMS welke tekst (HTML) opslaat in een Database dmv. het insert commando. Heel normaal dus, alles werkt ook perfect alleen nou wordt telkens 1 rij na een paar uur weer automatisch verwijderd. Kijk ik in PHPMyadmin dan zie ik hier overhead van 808 bytes. Als ik de tabel optimaliseer is de overhead weg, dan voer ik weer opnieuw de gegevens van de row in en er is dan geen overhead. Pas na een paar uur flushed mysql de row en krijg ik weer overhead. Het vreemde is dat ie het steeds bij 1 row doet, de andere rows zijn wel goed.
Heeft iemand een idee waar dit aan kan liggen?
moet je eens gaan kijken of je ook cron jobs of iets dergelijks hebt ;)
zover ik weet niet en een cronjob kan toch zomaar geen overhead veroorzaken?
Die overhead zou ik even laten voor wat het is, ik zou me meer zorgen maken over records die zo maar verdwijnen! Er is helemaal niets of niemand die deze delete uitvoert en toch wordt het record verwijderd? Als ik jou was, zou ik hier even heel diep induiken, dit is echt niet goed.
Ga ook eens checken of jouw database goed is beschermd tegen SQL-injection. Het zou natuurlijk kunnen dat één of andere 'grappenmaker' dit record verwijderd.
Ga ook eens checken of jouw database goed is beschermd tegen SQL-injection. Het zou natuurlijk kunnen dat één of andere 'grappenmaker' dit record verwijderd.
Hoi Martin,
laat de code eens zien waarmee je die insert doet?
laat de code eens zien waarmee je die insert doet?
Naja insert, update :)... simple as it can be:
$query = "UPDATE pagina SET inhoud='$inhoud' WHERE id='$id'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
$query = "UPDATE pagina SET inhoud='$inhoud' WHERE id='$id'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
Gewijzigd op 29/11/2005 22:31:00 door Martin
Okee, en laat de code eens zien waarmee je $inhoud en $id een waarde geeft? Is dat gewoon:
ja klopt:
$inhoud bevat HTML wat wordt opgemaakt door een richt text editor (FCKeditor). Het vreemde is dat alle 10 andere paginas wel goed werken en dat hij telkens 1 (ID nummer 9) verwijdered na een aantal uur. :S
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$id = $_POST['id'];
$inhoud = $_POST['inhoud'];
$query = "UPDATE pagina SET inhoud='$inhoud' WHERE id='$id'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
?>
$id = $_POST['id'];
$inhoud = $_POST['inhoud'];
$query = "UPDATE pagina SET inhoud='$inhoud' WHERE id='$id'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
?>
$inhoud bevat HTML wat wordt opgemaakt door een richt text editor (FCKeditor). Het vreemde is dat alle 10 andere paginas wel goed werken en dat hij telkens 1 (ID nummer 9) verwijdered na een aantal uur. :S
Verander dat eerst maar eens in:
MySQL verwijdert niet zomaar automatisch records.
edit: en mocht dat niet helpen, dan kun je altijd nog een anti sql-injection functie gebruiken, maar daarover later meer.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
// variabelen ophalen
$id = htmlspecialchars ($_POST['id']);
$inhoud = htmlspecialchars ($_POST['inhoud']);
?>
// variabelen ophalen
$id = htmlspecialchars ($_POST['id']);
$inhoud = htmlspecialchars ($_POST['inhoud']);
?>
MySQL verwijdert niet zomaar automatisch records.
edit: en mocht dat niet helpen, dan kun je altijd nog een anti sql-injection functie gebruiken, maar daarover later meer.
Gewijzigd op 29/11/2005 23:24:00 door Jan Koehoorn
Hoi Jan,
Als ik de code van jou gebruik schrijft ie helemaal niks meer weg naar de database... echter ik heb het iets aangepast en nu werkt het wel;
Ik heb nu data ingevoerd dmv het bovenstaande script, en nu maar kijken hoe lang het duurt voordat de row weer leeg is. :)
Blijf het zo vreemd vinden ik heb al veel meer CMS'en lopen maar hier nog nooit problemen mee gehad.
Als ik de code van jou gebruik schrijft ie helemaal niks meer weg naar de database... echter ik heb het iets aangepast en nu werkt het wel;
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?PHP
$verwerkid = htmlspecialchars($_POST['id']);
$verwerkinhoud = htmlspecialchars ($_POST['inhoud']);
$query = "UPDATE pagina SET inhoud='$verwerkinhoud' WHERE id='$verwerkid'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
?>
$verwerkid = htmlspecialchars($_POST['id']);
$verwerkinhoud = htmlspecialchars ($_POST['inhoud']);
$query = "UPDATE pagina SET inhoud='$verwerkinhoud' WHERE id='$verwerkid'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
?>
Ik heb nu data ingevoerd dmv het bovenstaande script, en nu maar kijken hoe lang het duurt voordat de row weer leeg is. :)
Blijf het zo vreemd vinden ik heb al veel meer CMS'en lopen maar hier nog nooit problemen mee gehad.
Zoals ze ook aangaven, het is waarschijnlijk geen fout in je database, maar een programmeer fout waardoor mensen jou database kunnen beïnvloeden. (MySQLInjection)
Martin:
Hoi Jan,
Als ik de code van jou gebruik schrijft ie helemaal niks meer weg naar de database... echter ik heb het iets aangepast en nu werkt het wel;
Als ik de code van jou gebruik schrijft ie helemaal niks meer weg naar de database... echter ik heb het iets aangepast en nu werkt het wel;
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?PHP
$verwerkid = htmlspecialchars($_POST['id']);
$verwerkinhoud = htmlspecialchars ($_POST['inhoud']);
$query = "UPDATE pagina SET inhoud='$verwerkinhoud' WHERE id='$verwerkid'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
?>
$verwerkid = htmlspecialchars($_POST['id']);
$verwerkinhoud = htmlspecialchars ($_POST['inhoud']);
$query = "UPDATE pagina SET inhoud='$verwerkinhoud' WHERE id='$verwerkid'";
mysql_query($query) or die ("Wegschrijven naar Database mislukt.");
?>
Ja, maar daar gebruik je ineens andere variabelennamen dan in je eerdere posting.
@jan
Ja dat heb ik express gedaan. iets als :
$blaat = $_POST['blaat'];
$piet = $_SESSION['piet'];
werkt bij mij dus niet. Maar als ik de variablenamen verander ineens weer wel :
$schaap = $_POST['blaat'];
$test = $_SESSION['piet'];
Maar goed de data staat op dit moment nog steeds in de database :) Als het een sql-injection is kun je dat dan ook ergens in een log oid. terug vinden?
Ja dat heb ik express gedaan. iets als :
$blaat = $_POST['blaat'];
$piet = $_SESSION['piet'];
werkt bij mij dus niet. Maar als ik de variablenamen verander ineens weer wel :
$schaap = $_POST['blaat'];
$test = $_SESSION['piet'];
Maar goed de data staat op dit moment nog steeds in de database :) Als het een sql-injection is kun je dat dan ook ergens in een log oid. terug vinden?
nee
sql injection is gewoon manipulatie van je database
mensen "kunnen" ongeoorloofd toegang krijgen tot jou database en je hele database leeg halen.
dus het is iets belangrijks om rekening mee te houden tijdens het programmeren
sql injection is gewoon manipulatie van je database
mensen "kunnen" ongeoorloofd toegang krijgen tot jou database en je hele database leeg halen.
dus het is iets belangrijks om rekening mee te houden tijdens het programmeren
Dan staat register_globals dus aan en dat is wel irritant :S
Irritant??? Het is ronduit achterlijk! Het is al jaren bekend dat dit bijzonder onveilig is en dan zijn er nog hostingproviders die te dom zijn om het uit te zetten? Het zou strafbaar moet zijn om het nog aan te hebben. Zoek eerst eens een andere provider op, verhuis je site en ga dan verder met het zoeken naar het lek.
Lees ondertussen eens een artikel over superglobals, mocht je dat nog niet kennen.
Lees ondertussen eens een artikel over superglobals, mocht je dat nog niet kennen.




