logo   INSERT kommandoen




INSERT-kommandoen findes kun i en enkelt version. MySQL er meget nærtagende m.h.t. syntax, bl.a. ' ' omkring variablerne, og at der ikke må være komma efter det sidste tabelfelt og den sidste variabel.


Se forklaring nedenfor vedrørende $mysqli_real_escape_string().


$xxx_a = $mysqli_real_escape_string($db_link, $xxx;);


if($fejlbeskeder == "")
{
$variabel02_a = $mysqli_real_escape_string($db_link, $variabel02);
...
$variabel0n_a = $mysqli_real_escape_string($db_link, $variabel0n);
}
// Upload til DB
$query = "
INSERT INTO tabelnavn
( tabelfelt01,     tabelfelt02,     tabelfelt03,    .....  tabelfelt0n,    tabelfelt0n+1 ) VALUES
('$variabel01_a', '$variabel02_a', '$variabel03_a', ..... '$variabel0n_a', NOW())
";
$result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));

header ("location: abc.php");
exit;


NOW() indsætter aktuel dato+tid i felt i DATETIME-format (): "2009-12-01 00:00:00".




SQL-injection og $mysqli_real_escape_string()


Ved tilførelse af data til MySQL (INSERT og UPDATE) er der en (teoretisk i det mindste) risiko for at 'nogen' kan indsætte / indskyde skadevoldende SQL-kommandoer i et felt til senere udførelse (f.eks. kopier databasen til 'nogen').


Risikoen for, at injection kan udføres, mindskes ved at lade alle data til databasen passere funktionen $mysqli_real_escape_string() før overførsel.


$mysqli_real_escape_string() foretager en oprydning i datastrengene, før de overføres til databasen. Oprydningen kan bestå i, at et anførselstegn (både enkelt og dobbelt) inde i en tekststreng får foranstillet \. Derved udelukkes, at det kan forvekles med et anførselstegn, der er en del af syntaksen.


En testkstreng, der er 'ombygget' med $mysqli_real_escape_string() er ikke fortsat håndterbar i PHP. Det er derfor vigtigt, at de oprindelige tekststrenge fortsat består, og at de 'ombyggede' isoleres. Dette gøres på følgende måde:


if($fejlbeskeder == "")
{
$variabel02_a = $mysqli_real_escape_string($db_link, $variabel02);
...
$variabel0n_a = $mysqli_real_escape_string($db_link, $variabel0n);
}


Alle 'ombyggede' variabler overføres til nye systematiserede navne (ovenfor udført ved at tilføje '_a' til deres oprindelige navne). Det er så variablerne med de nye navne, der overføres til databasen.


Ombygningen bør foretages så sent som muligt forud for overførslen til databasen.


Ved at anvende $mysqli_real_escape_string() undgår man bl.a. fejl som denne:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Anders', 'O'Andersen', 'Nygade 17', '', '4000', 'Roskilde', '', 'anders@mail.dk'' at line 3




Eksempler på anførselstegn i tekst


Anførselstegn (både enkelte og dobbelte) kan forekomme i adskillige sammenhænge i tekster; f.eks:
- James O'Connor
- Christian IX's gade
- engang i 1980'rne
- Marc O'Polo
- Jens' ged
- med en længde på 1'6".





















x
x