[PDO] update => Invalid parameter number: parameter was not defined

Overzicht Reageren

Thum b

Thum b

18/08/2010 12:13:37
Quote
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]

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
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();
?>

 

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)
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
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();
?>

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
 
PHP hulp

PHP hulp

09/02/2012 09:54:01
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jelmer rrrr

Jelmer rrrr

18/08/2010 15:33:33
Quote
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".
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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.
 
Thum b

Thum b

18/08/2010 16:46:56
Quote
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 -_-
Gewijzigd op 18/08/2010 17:36:04 door Thum b
 
Thum b

Thum b

02/09/2010 23:03:10
Quote
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 :)
 



Overzicht Reageren