Is het mogelijk om via php naar mysql een soort van test query te sturen?
Is het mogelijk om bijvoorbeeld een delete query te test runnen zonder dat hij echt velden verwijderd?
en dat je dan zoiets kan doen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
$query1="DELETE FROM tabelname WHERE id=".1;
$query2="SELECT * FROM tabelname";
if(test_query($query1)){
mysql_query($query1)or die(mysql_error().'<br><br>In Query:'.$query1);
mysql_query($query2)or die(mysql_error().'<br><br>In Query:'.$query2);
}
?>
$query1="DELETE FROM tabelname WHERE id=".1;
$query2="SELECT * FROM tabelname";
if(test_query($query1)){
mysql_query($query1)or die(mysql_error().'<br><br>In Query:'.$query1);
mysql_query($query2)or die(mysql_error().'<br><br>In Query:'.$query2);
}
?>
alvast bedankt voor de reactie :) Ikzelf denk dat het niet mogelijk is want ik kon het nergens vinden, maar ik hoop het wel want dat zou een probleempje hier oplossen :)
Gewijzigd op 01/01/1970 01:00:00 door Michael
1) verwijder query
2) kijkt of die query gelukt is
3) zo ja, volgende query
4) kijkt of die query gelukt is
5) zo ja, volgende query
6) zo nee, kan je eventueel de gedelete query weer terug adden
7) Error afhandeling
dat is basis..?
een query zou op zich zelf niet fout moeten gaan als je hem goed inelkaar zet, tenzij het met POST & GET vab. te maken heeft.. bijv. met login's.
Dan zou je toch egt moeten kijken of de query gelukt is of niet..
het is best krom inderdaad. maarja.... Het zou nu heel erg goed uitkomen. Maar ik had al wel verwacht dat het niet mogelijk was :)
ik weet niet of het mogelijk is of niet, maar zo kan het ook.. zelf zie ik ook geen reden om hem te testen als je hem net zo goed meteen uit kan voeren en kijken of het gelukt is...
ik wil dus of niets of alles maar niet ertussen in. Een extra controle. Maar ik moet ze gewoon goed maken zonder dat het nodig is :)
Gewijzigd op 01/01/1970 01:00:00 door michael
michael schreef op 25.01.2008 18:45:
Het is meer een extra controle. Ik moet ongeveer 10 queries uitvoeren achter elkaar. En als er 1 in de toekomst toevallig verkeerd gaat dan heb ik liever dat ze allemaal verkeerd gaan ipv de laatste. Als de eerste 9 dus al gerunt zijn.
ik wil dus of niets of alles maar niet ertussen in. Een extra controle. Maar ik moet ze gewoon goed maken zonder dat het nodig is :)
ik wil dus of niets of alles maar niet ertussen in. Een extra controle. Maar ik moet ze gewoon goed maken zonder dat het nodig is :)
Daar heb je transactions voor, als er één van de groep query's mislukt dan kun je alles terug draaien. Let wel op dit moet InnoDB zijn als engine als je dit wil gebruiken!
Maar, het uitvoeren van queries kan nooit in de soep lopen, het kan hooguit fout gaan. En omdat dit altijd het geval is, doe je iets aan foutafhandeling voor die situaties waarin het fout gaat.
Dat iets fout gaat, is de normaalste zaak van de wereld, ga daar niet moeilijk over doen, accepteer dat en anticipeer daar op.
@Rick: Met 'terug adden' mag ik hopen dat je doelt op een ROLLBACK in een TRANSACTION. Zo niet, dan kan het hopeloos fout gaan. Je kunt namelijk niet zomaar de data die in 1 record stond weer terugzetten, er zijn vrijwel altijd andere gegevens in andere tabellen met FOREIGN KEY's aan deze data gekoppeld. Wanneer je dan 1 record weggooit, volgt de rest automatisch. Hoe denk jij dat terug te zetten? Dat gaat niet. Vandaar dat je met een ROLLBACK de TRANSACTION ongedaan maakt, dan ben je weer terug bij af en is jouw data in (redelijk) veilige handen. (het blijft MySQL, het blijft kut). In MySQL MOET je de innoDB-engine gebruiken, met de overige engines kun je geen database bouwen.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Ok bedankt! Ik laat het lekker zo en met een paar extra test fases hoop ik dat dit nooit fout gaat!
michael schreef op 25.01.2008 18:53:
En waarom wil je niks aan foutafhandeling en/of transactions doen? Stelt niks bijzonders voor, in 5 tot 10 minuten heb je dat wel klaar. Gevolg: Je weet (vrij) zeker dat de data in de database correct is.Ok bedankt! Ik laat het lekker zo en met een paar extra test fases hoop ik dat dit nooit fout gaat!
Althans, voor zover je met MySQL zeker kunt zijn van correcte data... Niet dus, maar dat willen de meesten niet weten.
Transactions heb ik eerlijk gezegd nog nooit van gehoord en ik op dit moment op mijn werk heb ik geen tijd om dat uit te zoeken. Zodra ik thuis ben en tijd heb even kijken hoe dat in zijn werk gaat!
Code (php)
1
2
3
4
5
2
3
4
5
BEGIN;
INSERT INTO tabelnaam (kolom) VALUES ('waarde');
INSERT INTO tabelnaam (kolom) VALUES (waarde);
-- oeps! mislukt! Quotes om de waarde 'waarde' ontbreken...
ROLLBACK;
INSERT INTO tabelnaam (kolom) VALUES ('waarde');
INSERT INTO tabelnaam (kolom) VALUES (waarde);
-- oeps! mislukt! Quotes om de waarde 'waarde' ontbreken...
ROLLBACK;
Mocht alles zijn gelukt, dan doe je i.p.v. een ROLLBACK; een COMMIT;
Stelt niks niks voor. Je zult wel iedere query moeten controleren! Maar dat is niks bijzonders, doe je toch al.
wow wat een geweldige functie. Thanks!! echt te makkelijk ook :D