2016-06-02 38 views
2

このエラーは2ページで発生しましたが、理由を理解できません。私はコードを書き直してそれをチェックしましたが、間違っているものは見つけられません。SQLSTATE [HY093]:無効なパラメータ番号:バインドされた変数の数がトークンの数と一致しませんエラー

最初のものは、次のとおりです。

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

Typo、多分 ':cs_u'?また、その名前を2回使用します。 – chris85

+2

[[MySQLのテーブル名または列名として予約語を使用するために構文エラーが発生する]](http://stackoverflow.com/questions/23446377/syntax-error-due-to MySQLの予約語であり、そのためにクローズされる可能性がある 'long'となっている^ –

+2

^のように予約語としての予約語として使用されています。もし誰かがそれに答えてポップしたら、その可能性のある詐欺で私はそれを閉じます。 –

答えて

4

[OK]を、これはコメント(ところで、その「長い」に意図しゃれ)のためには長すぎます。

これは、ではなく、のタイプミスです(私はそうではないと思っています)。結論の後に空白があるバインドがかなりあります。

スペースを削除する必要があります。また、予約語をLONGのダンプで囲むか、予約語以外の名前に変更する必要があります。

I.e.

SET `long`=:long, ... 

参考:


脚注:TBH

:私は何かを逃したので、もし私は、すべてのあなたのバインドをカウントしていませんでした、あなたはそれらのすべてを越えて行く必要があります彼らはすべて一致します。


編集:

"私は考えスペースが機能するようになりました、それはC/C++のためのようにそれらを無視考え、PHPのために数えなかったもう一度すべてに感謝!! - バンドス。"

  • これは、C/C++ではない、PHPとスペース、その言語で数えるんです。
+0

私はそれをありがとう、ありがとう。私はPHPで長いキーワードであると考えていたが、それはデータベースセクションの一部ではないと思った。スペースと一緒に固定してください。もう一度助けてくれてありがとう! – bandos

+0

@bandosよろよ。義務はありませんが、解決策が見つかったことを誰にでも知らせることができますが、質問を閉じるために回答を受け入れることを検討してください。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-workがここに戻って、ティック/チェックマークで緑色に変わるまで同じことを行う方法があります。これは解決策が見つかったことをコミュニティに知らせます。そうでなければ、他の人は質問がまだ開いていると思うかもしれませんし、(もっと)回答を投稿したいかもしれません。スタックへようこそ。 –

+0

スペースはc/C++ではカウントされず、ハードコードされた文字列でない限り、コンパイル時に無視されます – bandos

関連する問題