Bypass voor error = Invalid parameter number:

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Francoi gckx

Francoi gckx

10/07/2013 14:06:32
Quote Anchor link
het onnodige heb ik weggelaten
Ik heb dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
                         INSERT INTO blabla
                               crs_link_inschrijving, crs_link_cv, crs_link_trajectplan,
                crs_link_certificaten, crs_link_rapportage,
                crs_link_aanwezigheid)
            VALUES (
                :
inschrijving, :cv, :trajectplan,
                :
certificaten, :rapportage, :aanwezigheid,)");
?>

Nu is het niet zeker (en dat mag) dat die 6 waardes worden gehaald in de volgende foreach loop
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
?php
                        foreach ($links as $name_field => $dir_link)
                {
                    $stmt->bindParam($name_field, $dir_link, PDO::PARAM_STR);
                }
                
            if ($stmt->execute())
?>



Dus als bijv de foreach maar 1/2/3/4 of 5 van de 6 waardes produceert hoe kan ik die andere toch leeglaten?
Gewijzigd op 10/07/2013 14:35:40 door Francoi gckx
 
PHP hulp

PHP hulp

23/04/2024 14:25:41
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/07/2013 14:42:24
Quote Anchor link
Eerst controleren of de waarde leeg is of niet en afhankelijk daarvan PARAM_STR of PARAM_NULL kiezen
 
Francoi gckx

Francoi gckx

10/07/2013 14:50:35
Quote Anchor link
Welke waarde?

Toevoeging op 10/07/2013 14:51:34:

Dus dan moet ik via een omweg een array maken van de velden die er zijn

en dan $name_field controleren met de array?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/07/2013 15:03:03
Quote Anchor link
Sorry, even verkeerd begrepen.
Ik dacht dat $links array altijd uit die zes velden zou bestaan, dan had je op contoleren of een veld al dan niet ingevuld is.
 
Francoi gckx

Francoi gckx

10/07/2013 15:04:34
Quote Anchor link
Nee dat is dus niet zo het kunnen er max 6 zijn of maar 1 terwijl de INSERT VALUES altijd 6 zijn
 
Erwin H

Erwin H

10/07/2013 15:14:02
Quote Anchor link
Waarom zijn die insert values er dan altijd 6? Dat kan je natuurlijk ook gewoon variabel maken.
 
Francoi gckx

Francoi gckx

10/07/2013 15:16:00
Quote Anchor link
Ok toch even verkeerd gezegd er zijn meer INSERT VALUES (die heb ik weggelaten)
maar bij die 6 is het variabel

Wat zou een handige manier zijn?
Gewijzigd op 10/07/2013 15:38:18 door Francoi gckx
 
Erwin H

Erwin H

10/07/2013 16:33:47
Quote Anchor link
Of er nog meer zijn of niet maakt op zich niet zo heel veel uit. Wat je kan doen is eerst een loopje maken door die speciale velden en afhankelijk daarvan de query opbouwen. Daarna prepare je het statement en maak je het loopje zoals je al had, waarbij je dus de parameters vult. In grote lijnen zou je dan zoiets krijgen:
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
<?php
//query opbouwen
$fields = array();
foreach ($links as $name_field => $dir_link){
  $fields[] = $name_field;
}

$query = 'INSERT INTO table(field1, field2, field3';
if ( count( $fields ) > 0 ){
  $query .= ', '.implode( ',', $fields );
}

$query .= ') VALUES (:field1, :field2, :field3';
if ( count( $fields ) > 0 ){
  $query .= ', :'.implode( ', :', $fields );
}

$query .= ')';
?>

En dan de rest, dus het preparen en het vullen van de parameters wat je al hed.

Twee opmerkingen:
1 - als de keys in je array niet gelijk zijn aan je velden in de database dan zal je in de eerst foreach loop dus een vertaling moeten maken van array key naar databaseveldnaam.
2 - de parameternaam wordt nu gelijk aan de databaseveldnaam. Dit is iets wat ik standaard doe, omdat je dan heel eenvoudig dit soort queries variabel kunt opbouwen.
Gewijzigd op 10/07/2013 16:34:23 door Erwin H
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/07/2013 17:33:57
Quote Anchor link
Nu ben ik sowieso al geen voorstander van nullable kolommen in een tabel, maar dit lijkt ook nog verdacht veel op repeterende kolommen.
 
Francoi gckx

Francoi gckx

10/07/2013 22:25:06
Quote Anchor link
Bedankt Erwin H het werkt nu
Gewijzigd op 10/07/2013 23:11:55 door Francoi gckx
 



Overzicht Reageren

 
 

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.