Invoegen van records

Nu we een eigen tabel gemaakt hebben en gezien hebben hoe we de database vanuit PHP kunnen benaderen, is het tijd om eens wat gegevens aan onze tabel toe te gaan voegen.

Syntax
Voor het invoegen van records gebruiken we een INSERT query. De syntax van zo'n query ziet er als volgt uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
INSERT INTO tabelnaam
(
    kolomnaam,
    kolomnaam
)
VALUES
(
    waarde,
    waarde
)

De query beginnen we met INSERT INTO gevolgd door de naam van de tabel waarin we records willen invoegen. Achter de tabelnaam staan tussen haakjes de kolommen in welke we gegevens weg gaan schrijven. In het VALUES gedeelte geven we vervolgens de waarden op die we in elke kolom willen invoegen.

Invoegen van een record (SQL)
De INSERT query voor het invoegen van de eerste rij uit onze tabel ziet er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSERT INTO werknemers
(
    voornaam,
    tussenvoegsel,
    achternaam,
    geboortedatum,
    salaris_schaal
)
VALUES
(
    'Nico',
    'de',
    'Boer',
    '1958-03-24',
    18
)

Allereerst valt ons op dat we de kolom id niet in onze INSERT query terug zien. Dat komt omdat we een auto_increment op die kolom hebben staan waardoor MySQL automatisch een waarde toekent.

Verder valt te zien dat we strings in SQL net zo goed tussen quotes zetten als in PHP. Aangezien we ook hier enkele quotes gebruiken, zullen we zien dat we in PHP dubbele quotes gaan gebruiken voor onze SQL queries.

Invoegen van een record (PHP)
Als we deze query in PHP willen uitvoeren, zou dat er als volgt uitzien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
require_once 'db_config.php';

$sql = "
    INSERT INTO werknemers
    (
        voornaam,
        tussenvoegsel,
        achternaam,
        geboortedatum,
        salaris_schaal
    )
    VALUES
    (
        'Nico',
        'de',
        'Boer',
        '1958-03-24',
        18
    )
"
;

if(!$res = mysql_query($sql))
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

else
{
    $id = mysql_insert_id();
}

?>

De query hebben we nu in de variabele $sql opgenomen, uitgevoerd en gecontroleerd op fouten. Als je dit scriptje uitvoert zul je hoogstwaarschijnlijk een witte lege pagina te zien krijgen. Dat is in dit geval de bevestiging dat het gelukt is. Merk ook nog even de dubbele quotes op die we rond onze query gebruikt hebben, op die manier hoeven we de enkele quotes in de query niet te escapen.

Omdat we een auto_increment in de tabel hebben staan, kunnen we met mysql_insert_id() het id bepalen van het laatste ingevoegde record. De variabele $id zal nu deze dus dit id bevatten. Dit heb je natuurlijk lang niet altijd nodig, maar soms komt het erg van pas.

Meerdere records tegelijk invoegen (SQL)
Het is ook mogelijk om met één query meerdere records in te voegen. Dit doen we door de VALUES van de verschillende records te scheiden met een komma:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
INSERT INTO werknemers
(
    voornaam,
    tussenvoegsel,
    achternaam,
    geboortedatum,
    salaris_schaal
)
VALUES
(
    'Tim',
    '',
    'Janssen',
    '1982-01-30',
    10
),
(
    'Pim',
    '',
    'Vosse',
    '1982-01-30',
    10
)

Het enige dat aan deze query anders is ten opzichte van de eerste INSERT query, is dat er nu twee records tegelijkertijd ingevoegd worden. Verder is alles hetzelfde.

Meedere records tegelijk invoegen (PHP)
In PHP zou deze bewerking er als volgt uitzien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
require_once 'db_config.php';

$sql = "
    INSERT INTO werknemers
    (
        voornaam,
        tussenvoegsel,
        achternaam,
        geboortedatum,
        salaris_schaal
    )
    VALUES
    (
        'Tim',
        '',
        'Janssen',
        '1982-01-30',
        10
    ),
    (
        'Pim',
        '',
        'Vosse',
        '1982-01-30',
        10
    )
"
;

if(!$res = mysql_query($sql))
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

?>

Zoals we zien is hier ook niet veel verschil met de vorige code om een record in te voegen.

Het invoegen van meerdere records kan op een veel efficiëntere manier, namelijk door het gebruik van een prepared statement. Onder andere PDO en MySQLi bieden deze functionaliteit:

PDO - Prepared statements
MySQLi - Prepared statements

Invoegen van gebruikersinput
Een belangrijke regel binnen PHP is dat input van een gebruiker nooit te vertrouwen is. Je zult dus ook te allen tijde moeten controleren of de data wel is dat jij denkt dat het is. Zo ook moet input beveiligd worden voordat je het in een query kunt gebruiken.

Stel je een fictieve tabel voor waarin een voor- en achternaam ingevoerd kunnen worden en laat de voor- en achternaam uit een formulier komen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
require_once 'db_config.php';

$voornaam = mysql_real_escape_string($_POST['voornaam']);
$achternaam = mysql_real_escape_string($_POST['achternaam']);

$sql = "
    INSERT INTO fictieve_tabel
    (
        voornaam,
        achternaam
    )
    VALUES
    (
        '"
.$voornaam."',
        '"
.$achternaam."'
    )
"
;

if(!$res = mysql_query($sql))
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

?>

We gebruiken nu de functie mysql_real_escape_string() om de input vanuit het formulier te beveiligen. Vervolgens gebruiken we de veilige variabelen $voornaam en $achternaam in de query. Zouden we dit niet doen, dan is ons script namelijk gevoelig voor SQL injectie, een veiligheidslek.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.