bandos bandos - 6 months ago 16
MySQL Question

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens error

I have gotten this error on 2 of my pages and I cant seem to understand why. I have re written the code and triple checked it, cant seem to find whats wrong.

the first one is:

public function academics ($id,$problem_solving , $math_understanding, $cs_understanding , $math_useful , $cs_useful, $math_ava, $cs_ava, $assigment_start, $assigment_submit, $travel_time, $stress,$assigment_when, $full_part, $pair_programming, $attending_class, $attending_labs,$attending_tutorials, $extra_reading, $p_progamming, $q_cs, $q_maths, $procrastinating_assigments, $procrastinating_studying){

try{


$stmt = $this->db->prepare("UPDATE student_data SET problem_solving=:problemS, math_understanding=:math_U, cs_understanding=: cs_u, math_useful =:m, cs_useful=:cs_u, math_ava=:ma, cs_ava=:ca, assigment_start=:ass_st, assigment_submit=:assigment_submit, travel_time =:travel_time, stress=: stress, assigment_when =:assigment_when, full_part =:full_part, pair_programming=: pair_programming, attending_class=: attending_class, attending_labs=: attending_labs, attending_tutorials =:attending_tutorials, extra_reading =:extra_reading, p_progamming=: p_progamming, q_cs=: q_cs, q_maths=: q_maths, procrastinating_assigments=:procrastinating_assigments, procrastinating_studying=:procrastinating_studying WHERE user_id=:uid");

$stmt->bindparam(":uid", $id);

$stmt->bindparam(":problemS",$problem_solving );
$stmt->bindparam(":math_U",$math_understanding);
$stmt->bindparam(":cs_u",$cs_understanding );
$stmt->bindparam(":m",$math_useful );
$stmt->bindparam(":cs_u",$cs_useful);
$stmt->bindparam(":ma",$math_ava);
$stmt->bindparam(":ca",$cs_ava);
$stmt->bindparam(":ass_st",$assigment_start);
$stmt->bindparam(":assigment_submit",$assigment_submit);
$stmt->bindparam(":travel_time",$travel_time);
$stmt->bindparam(":stress",$stress);
$stmt->bindparam(":assigment_when",$assigment_when);
$stmt->bindparam(":full_part",$full_part );
$stmt->bindparam(":pair_programming",$pair_programming);
$stmt->bindparam(":attending_class",$attending_class);
$stmt->bindparam(":attending_labs",$attending_labs);
$stmt->bindparam(":attending_tutorials",$attending_tutorials);
$stmt->bindparam(":extra_reading",$extra_reading);
$stmt->bindparam(":p_progamming",$p_progamming);
$stmt->bindparam(":q_cs",$q_cs);
$stmt->bindparam(":q_maths",$q_maths);
$stmt->bindparam(":procrastinating_assigments",$procrastinating_assigments);
$stmt->bindparam(":procrastinating_studying",$procrastinating_studying);

$stmt->execute();

} catch(PDOException $e)
{
echo $e->getMessage();
}

}


the second one is :

public function comps ($id,$long,$often_comp,$gaming,$research,$doc,$music,$vid,$fix,$social){

try{
$stmt = $this->db->prepare("UPDATE student_data SET long=:long, often_comp=:often , gaming=:gaming, research=:research, doc=:doc, music=:music, vid=:vid, fix=:fix, social=:social WHERE user_id=:uid");



$stmt->bindparam(":uid",$id);
$stmt->bindparam(":long",$long);
$stmt->bindparam(":often",$often_comp);
$stmt->bindparam(":gaming",$gaming);
$stmt->bindparam(":research",$research);
$stmt->bindparam(":doc",$doc);
$stmt->bindparam(":music",$music);
$stmt->bindparam(":vid",$vid);
$stmt->bindparam(":fix",$fix);
$stmt->bindparam(":social",$social);

$stmt->execute();

} catch(PDOException $e)
{
echo $e->getMessage();
}

}


thanks in advance for any help / comments

Answer

Ok, this is too long for a comment (no pun intended on that "long" btw).

Seeing that IF those are not typos (and I hope they're not), you have quite a few binds that have spaces after the colon.

You need to delete the spaces for them and also wrap the MySQL reserved word in ticks being LONG, or rename it to something other than a reserved word.

I.e.

SET `long`=:long, ...

Reference:


Footnotes:

TBH: I didn't count all your binds, so if I missed something, you'll need to go over them all and make sure they all match.


Edit:

"i had no idea spaces count for php, thought it ignored them like for C/C++, works now. thank you all again!! – bandos"

  • This isn't C/C++, it's PHP and spaces do count in that language.