Default waarde voor bindParam (PDO)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Hey,

Voor de connectie met de mysql database gebruik ik de PDO class, waarbij ik voor het invoegen van data het volgende doe (in verkorte vorm weliswaar):

PHP:
1
2
3
4
5
6
7
<?
$sql = $db->prepare("INSERT INTO leden (geslacht) VALUES (:geslacht)");

$sql->bindParam('geslacht',$_POST['geslacht']);

$sql->execute();
?>


Nu kan het zijn dat, in dit voorbeeld, $_POST['geslacht'] leeg is (dus geen waarde heeft). Wanneer dit het geval is krijg ik een PDO error terug met de melding dat 'geslacht' niet 'null' mag zijn.

Het is eenvoudig op te lossen door van te voren te controleren of $_POST['geslacht'] leeg is, echter aangezien er veel velden zijn vergelijkbaar met 'geslacht' vroeg ik mij af of er wellicht een functie is in PDO waarmee ik default waarden kan instellen voor dit soort velden. Anders moet ik alle variabelen (onnodig) gaan controleren of deze wel een waarde hebben.

Op internet (lees: php.net) heb ik geen antwoord kunnen vinden helaas.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dan maak je daar toch gewoon zelf een functie voor :?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Gelukkig is dit niet mogelijk. Anders kun je hele rare queries te zien krijgen. Zoals .oisyn ook reeds zegt is het makkelijk om er zelf dan een functie voor te schrijven.

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Sorry, maar heb m'n antwoord inmiddels gevonden. Je kan in de database aangeven of een veld 'null' mag zijn. Helemaal niet bij stilgestaan.

Of is dit geen goede oplossing?

[ Voor 11% gewijzigd door radem205 op 16-02-2010 17:09 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Blijkbaar heb je er eerst voor gekozen dat een veld geen NULL mag zijn. Nu ga je ineens je datamodel aanpassen wegens wat onhandigheid bij de specifieke implementatie die van dat datamodel gebruik maakt. Dat is sowieso geen goede reden. Waar je over na moet denken is of het mag voorkomen dat een geslacht ongespecificeerd is (afgezien van hoe je dat gaat implementeren!). Pas als het antwoord op die vraag "ja" is moet je het veld in de database nullable maken.

Stel je wilt dat een geslacht altijd gespecificeerd is, dan is een eigen functie die bindParam() aanroept natuurlijk ook zo gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
function bindParamWithDefault($sql, $paramName, $paramValue, $default)
{
    if (!isset($paramValue))
        $paramValue = $default;
    $sql->bindParam($paramName, $paramValue);
}

$sql = $db->prepare("INSERT INTO leden (geslacht) VALUES (:geslacht)"); 
bindParamWithDefault($sql, "geslacht", $_GET["geslacht"], "man");

[ Voor 33% gewijzigd door .oisyn op 16-02-2010 17:18 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
.oisyn schreef op dinsdag 16 februari 2010 @ 17:12:
Blijkbaar heb je er eerst voor gekozen dat een veld geen NULL mag zijn. Nu ga je ineens je datamodel aanpassen wegens wat onhandigheid bij de specifieke implementatie die van dat datamodel gebruik maakt. Dat is sowieso geen goede reden. Waar je over na moet denken is of het mag voorkomen dat een geslacht ongespecificeerd is (afgezien van hoe je dat gaat implementeren!). Pas als het antwoord op die vraag "ja" is moet je het veld in de database nullable maken.
Ja dat begrijp ik. Ik heb mij (natuurlijk) wel afgevraagd of in dit geval geslacht null mag zijn, en dat mag dus in dit geval. De rest wat niet null mag zijn wordt voordat de query wordt uitgevoerd gecontroleerd.

Maar is het een goede methode om in dit geval in de database in te stellen dat een veld leeg mag zijn? Of kan dat beter op een andere manier (middels een functie in php of iets dergelijks)?

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Wil je sowieso niet eerst wat checks uitvoeren op de invoer? Nu zal in het beste geval de database een error geven. Wat is het datatype van je geslacht kolom in de database?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Maar is het een goede methode om in dit geval in de database in te stellen dat een veld leeg mag zijn?
En:
Ik heb mij (natuurlijk) wel afgevraagd of in dit geval geslacht null mag zijn, en dat mag dus in dit geval.
Dus wat denk je zelf? ;)

Of draai het om: wat moet dat veld in de database zijn als er geen geslacht gespecificeerd is door de gebruiker?

[ Voor 18% gewijzigd door .oisyn op 16-02-2010 17:20 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
radem205 schreef op dinsdag 16 februari 2010 @ 17:14:
Maar is het een goede methode om in dit geval in de database in te stellen dat een veld leeg mag zijn?
Als het veld leeg (null) mag zijn, dan is dat zo. Die vraag kun jij alleen beantwoorden.
edit: * RobIII mept .oisyn

Verder kun je ook eens kijken naar default values in de fields van je DB. Net zoals je aangeeft of een veld null mag zijn kun je het ook een default value geven. Let wel: het is niet waarschijnlijk dat je ze daar wil definiëren maar kan in bepaalde gevallen handig zijn.

[ Voor 11% gewijzigd door RobIII op 16-02-2010 17:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Persoonlijk lijkt mij de input voor geslacht een combobox/select met de waarden volgens ISO 5218, en dan hebben alle 4 de mogelijkheden een nummer. Hoe kun je dan niks terugkrijgen in die $_POST? ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
pedorus schreef op dinsdag 16 februari 2010 @ 17:25:
Hoe kun je dan niks terugkrijgen in die $_POST? ;)
Lui die gaan liggen "klieren" met de formulieren? ;) Je hoort een dergelijke controle (als je een value vereist) gewoon alsnog uit te voeren.

[ Voor 17% gewijzigd door RobIII op 16-02-2010 17:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
pedorus schreef op dinsdag 16 februari 2010 @ 17:25:
Persoonlijk lijkt mij de input voor geslacht een combobox/select met de waarden volgens ISO 5218, en dan hebben alle 4 de mogelijkheden een nummer. Hoe kun je dan niks terugkrijgen in die $_POST? ;)
Voor het geslacht maak ik gebruik van 2 radio buttons, waarbij het tijdens registratie niet verplicht is 1 van beiden te selecteren. En ik gebruik in het geval van geslacht een INT(1) veld in mysql.

Even voor de duidelijkheid: Ik controleer alle waarden die verplicht zijn wel hoor :)

[ Voor 7% gewijzigd door radem205 op 16-02-2010 17:26 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

En ik gebruik in het geval van geslacht een INT(1) veld in mysql.
Een enum met 'man' en 'vrouw' lijkt me netter.
pedorus schreef op dinsdag 16 februari 2010 @ 17:25:
Persoonlijk lijkt mij de input voor geslacht een combobox/select met de waarden volgens ISO 5218, en dan hebben alle 4 de mogelijkheden een nummer. Hoe kun je dan niks terugkrijgen in die $_POST? ;)
Die mist nog de opties 'eerst man, nu vrouw' en 'eerst vrouw, nu man', maar dat geldt voornamelijk in de zorg ;)

[ Voor 66% gewijzigd door .oisyn op 16-02-2010 17:30 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1