[PDO] update => Invalid parameter number: parameter was not defined
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: [icode]$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);[/icode]
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']);"
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
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 Thum b
Gesponsorde koppelingen:
Volgens mij hoef je in je query geen quotes meer te gebruiken. Prepared statement zijn immers om query en data te scheiden, en die quotes zijn om data aan te geven. Ze zeggen immers "en nu komt er een string".
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.
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.
Bedankt voor je snelle reactie :)
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..
edit momenteel ligt de mysql server eruit van mijn paid hosting.
op de hoogte gesteld, maar voordat ze er wat aan doen duurt nog wel ff -_-
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 Thum b
eindelijk is de mysql server gerepareerd, ze hebben localhost verboden zonder een waarschuwing of mededeling, en natuurlijk krijg ik daar pas na 3 e-mails (na 1 maand) al antwoord op :) houd ik van, service...
ik heb het alleen nog niet op kunnen lossen, momenteel een ander project, ik woeker dit topic later wel aan :)
ik heb het alleen nog niet op kunnen lossen, momenteel een ander project, ik woeker dit topic later wel aan :)


