SQLSTATE [HY093]:无效的参数号:绑定变量数与令牌数不匹配错误 [英] SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens error

查看:679
本文介绍了SQLSTATE [HY093]:无效的参数号:绑定变量数与令牌数不匹配错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个页面出现此错误,我不明白为什么.我已经重写了代码并对其进行了三重检查,但是我找不到错误所在.

I got this error on 2 of my pages and I can't understand why. I have rewritten the code and triple checked it, but I can't find what is wrong.

第一个是:

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

第二个是:

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

推荐答案

好的,这个评论太长了(对这个长"顺便说一句没有双关语).

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.

您需要删除空格,并将MySQL保留字包装在LONG中,或将其重命名为保留字以外的其他名称.

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.

SET `long`=:long, ...

参考:

脚注:

TBH:我没有计算您的所有绑定,因此,如果我错过了某些内容,则需要检查所有绑定并确保它们都匹配.

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.

我不知道php的空格,以为它像C/C ++一样忽略了它们,现在可以工作.再次感谢大家!– bandos"

  • 这不是C/C ++,它是PHP,空格确实可以使用该语言.
  • 这篇关于SQLSTATE [HY093]:无效的参数号:绑定变量数与令牌数不匹配错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆