Since jaar en dag voer ik zo mijn insert statements uit:

$mysqli->query('INSERT INTO wekkers (datetime) VALUES ("'.$mysqli->real_escape_string($datetime).'");');


Het kan ook zo:

$mysqli->execute_query('INSERT INTO wekkers (datetime) VALUES (?);', [$datetime]);


Klopt het dat ik bij het laatste de real_escape_string niet meer hoeft te doen? Of ontbreekt dat gewoon in wat ik online heb gevonden?

En stel ik wil een NULL value invoegen, dat doe ik normaliter zo:

NULLIF("'.$mysqli->real_escape_string($datetime).'","")


Hoe doe ik dat met execute_query?
De tweede manier die je gebruikt is een prepared statement. Daarin is het escapen met real_escape_string niet meer nodig.

Als je een NULL wilt invoegen, dan kan dat op deze manier met PHP:

$datetime = $datetime === '' ? null : $datetime;

$mysqli->execute_query(
    'INSERT INTO wekkers (datetime) VALUES (?);',
    [$datetime]
);



Je kan ook in je VALUES een NULLIF() gebruiken. Maar dat maakt de query onleesbaarder vind ik.
Dank voor deze nuttige aanvulling. Ga er eens mee testen.

[size=xsmall]Toevoeging op 21/03/2026 12:22:33:[/size]

Hetzelfde, toch?

$datetime = $datetime ?? NULL;


of

$datetime = $datetime ?: NULL;
Veur Heur op 21/03/2026 11:28:38

Hetzelfde, toch?
$datetime = $datetime ?? NULL;

of
$datetime = $datetime ?: NULL;


Nee, niet helemaal hetzelfde. Die ?? werkt alleen als $datetime echt een NULL-value is (waardoor '?? NULL' een beetje een onnodige constructie is).

'?: NULL' werkt wel, omdat ?: een if-then-else-constructie is en een lege string door de if() wordt geëvalueerd tot false.
Welke is dan de beste werkwijze? ?? of ?:
Veur Heur op 29/03/2026 17:35:45

Welke is dan de beste werkwijze? ?? of ?:

In dit geval, omdat je $datetime wilt undefinen als het een lege string is, zou ik voor ?: gaan; gebruik je ?? dan gebeurt er exact niets.

$datetime = $datetime ?? NULL;

# is hetzelfde als

if (isset($datetime)) {
   # $datetime bestaat en is niet null
   $datetime = $datetime;
}
else {
   # $datetime is null of bestaat niet
   $datetime = NULL;
}

Oftewel: na de if-then-else heeft $datetime dezelfde waarde als ervoor.

Gebruik je ?: dan krijg je iets andere code:

$datetime = $datetime ?: NULL;

# is hetzelfde als

if ($datetime) {
   # $datetime heeft een truthy-waarde
   $datetime = $datetime;
}
else {
   # $datetime heeft een falsy-waarde
   $datetime = NULL;
}

Die check is iets losser dan isset(), want als truthy wordt alles gezien dat niet undefined/null, een lege string, het cijfer 0, de string '0', de boolean-waarde false of een lege array is.

Als het je er puur om gaat een lege string om te zetten naar null, dan zou ik voor de constructie van Ariën gaan:

$datetime = $datetime === '' ? null : $datetime;

Dat is misschien wat meer tikwerk, maar het geeft wel expliciet aan wat je aan het doen bent, en daar heb je wellicht nog een hoop plezier van als je over drie jaar je script zit te debuggen. ;-)

Reageren