[PDO] update => Invalid parameter number: parameter was not defined
ik ben bezig met een layout,
is wel zo'n beeetje af, in het bovenste menu is een mogelijkheid om de kleur aan te passen van de layout (achtergrond, en later misschien links ofzo)
nu was het nogal standaard met een cookie en wat javascript, maar nu wil ik er PHP achter doen, zodat ik het op kan slaan in een DB
en het dus dieper zit dan een cookie (die veranderd na onunload, zodat php niet overbelast wordt)
cookie enzo werkt prima, javascript ook, het in de database zetten ook, maar updaten werkt niet, dan krijg ik de volgende fout:
"Invalid parameter number: parameter was not defined" op de plek waar deze code staat: [icode]$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);[/icode]
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if($aantal>0)// Er zijn rijen aanwezig (Dus UPDATE)
{
$sql="UPDATE `layout` SET `hex` = ':hex' AND `kleur` = ':kleur' AND `generated` = ':generated' WHERE `ip` = ':ip'";
}
else//Geen rijen aanwezig. (Dus INSERT)
{
$sql="INSERT INTO `layout` (`ip`, `hex`, `kleur`, `generated`) VALUES (':ip', ':hex', ':kleur', ':generated')";
}
$stmt=$db->prepare($sql);
$stmt->bindParam(':ip',$_SERVER['REMOTE_ADDR']);
$stmt->bindParam(':hex',$_SESSION['layout']['hex']);
$stmt->bindParam(':kleur',$_SESSION['layout']['kleur']);
$stmt->bindParam(':generated',$_SESSION['layout']['generated']);
$beginTransaction=true;
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>
if($aantal>0)// Er zijn rijen aanwezig (Dus UPDATE)
{
$sql="UPDATE `layout` SET `hex` = ':hex' AND `kleur` = ':kleur' AND `generated` = ':generated' WHERE `ip` = ':ip'";
}
else//Geen rijen aanwezig. (Dus INSERT)
{
$sql="INSERT INTO `layout` (`ip`, `hex`, `kleur`, `generated`) VALUES (':ip', ':hex', ':kleur', ':generated')";
}
$stmt=$db->prepare($sql);
$stmt->bindParam(':ip',$_SERVER['REMOTE_ADDR']);
$stmt->bindParam(':hex',$_SESSION['layout']['hex']);
$stmt->bindParam(':kleur',$_SESSION['layout']['kleur']);
$stmt->bindParam(':generated',$_SESSION['layout']['generated']);
$beginTransaction=true;
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>
de code zit natuurlijk in een trycatch combo.
het bindParam gedeelte is dus hetzelfde voor insert en update.
deze code wordt gedraait in de CSS (die dus een php pagina is, met een header en mod_rewrite, zodat het op elke nodige pagina automatisch zit :))Dag lui,
ik ben bezig met een layout,
is wel zo'n beeetje af, in het bovenste menu is een mogelijkheid om de kleur aan te passen van de layout (achtergrond, en later misschien links ofzo)
nu was het nogal standaard met een cookie en wat javascript, maar nu wil ik er PHP achter doen, zodat ik het op kan slaan in een DB
en het dus dieper zit dan een cookie (die veranderd na onunload, zodat php niet overbelast wordt)
cookie enzo werkt prima, javascript ook, het in de database zetten ook, maar updaten werkt niet, dan krijg ik de volgende fout:
"Invalid parameter number: parameter was not defined" op de plek waar deze code staat: "$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);"
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if($aantal>0)// Er zijn rijen aanwezig (Dus UPDATE)
{
$sql="UPDATE `layout` SET `hex` = ':hex' AND `kleur` = ':kleur' AND `generated` = ':generated' WHERE `ip` = ':ip'";
}
else//Geen rijen aanwezig. (Dus INSERT)
{
$sql="INSERT INTO `layout` (`ip`, `hex`, `kleur`, `generated`) VALUES (':ip', ':hex', ':kleur', ':generated')";
}
$stmt=$db->prepare($sql);
$stmt->bindParam(':ip',$_SERVER['REMOTE_ADDR']);
$stmt->bindParam(':hex',$_SESSION['layout']['hex']);
$stmt->bindParam(':kleur',$_SESSION['layout']['kleur']);
$stmt->bindParam(':generated',$_SESSION['layout']['generated']);
$beginTransaction=true;
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>
if($aantal>0)// Er zijn rijen aanwezig (Dus UPDATE)
{
$sql="UPDATE `layout` SET `hex` = ':hex' AND `kleur` = ':kleur' AND `generated` = ':generated' WHERE `ip` = ':ip'";
}
else//Geen rijen aanwezig. (Dus INSERT)
{
$sql="INSERT INTO `layout` (`ip`, `hex`, `kleur`, `generated`) VALUES (':ip', ':hex', ':kleur', ':generated')";
}
$stmt=$db->prepare($sql);
$stmt->bindParam(':ip',$_SERVER['REMOTE_ADDR']);
$stmt->bindParam(':hex',$_SESSION['layout']['hex']);
$stmt->bindParam(':kleur',$_SESSION['layout']['kleur']);
$stmt->bindParam(':generated',$_SESSION['layout']['generated']);
$beginTransaction=true;
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>
het bindParam gedeelte is dus hetzelfde voor insert en update.
deze code wordt gedraait in de CSS (die dus een php pagina is, met een header en mod_rewrite, zodat het op elke nodige pagina automatisch zit :))
mijn vraag is dus, waarom krijg ik die foutmelding? en hoe kan ik dat oplossen.
alvast bedankt
//Jeroen
Gewijzigd op 19/08/2010 22:59:05 door Thumb nail
Code (php)
1
$sql = "UPDATE layout SET hex = :hex, kleur = :kleur, generated = :generated WHERE ip = :ip";
Ik weet niet of dat ook automatisch het probleem oplost, al kan ik me wel voorstellen dat MySQL nu je placeholders niet ziet omdat 'ie denkt dat het strings zijn, en daarom boos wordt wanneer je :ip probeert te koppelen.
Je kan trouwens wanneer je MySQL gebruikt (wat je overduidelijk doet :P) ook de REPLACE INTO of beter INSERT ... ON DUPLICATE KEY UPDATE syntax gebruiken. Dan hoef je niet eerst te controleren of de regel al in de database zit.
ik had het eerst ook zonder quotes, alleen mijn notepad++ highlighte hex ook, dus ik dacht, laat ik dat maar quoten (`).
en het is alleen ip, de rest komt wel goed door.
ik zal eens kijken naar die links, dat wist ik inderdaad niet :)
ik laat het weten als het gelukt is, of niet..
op de hoogte gesteld, maar voordat ze er wat aan doen duurt nog wel ff -_-
Gewijzigd op 18/08/2010 17:36:04 door Thumb nail
ik heb het alleen nog niet op kunnen lossen, momenteel een ander project, ik woeker dit topic later wel aan :)
Heb je het al opgelost?
Omdat het onnodig is om zo een oud topic omhoog te schoppen, wat verwarring kan veroorzaken bij de leden, sluit ik dit topic. Mochtje met hetzelfde probleem als de topicstarter zitten, gelieve een nieuw topic te openen.
Lees ook even je PM-bericht. :-)
Gewijzigd op 14/02/2019 09:16:33 door - Ariën -