SQLSTATE : Недопустимый номер параметра: количество связанных переменных не совпадает с числом ошибок токенов

Я получил эту ошибку на двух моих страницах, и я не понимаю, почему. Я переписал код, и triple проверил его, но я не могу найти, что не так.

Первый:

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

Хорошо, это слишком длинно для комментария (никакая каламбур не предназначена для этого «длинного» кстати).

Увидев, что ЕСЛИ это не опечатки (и я надеюсь, что это не так), у вас есть довольно много связей, у которых есть пробелы после двоеточия.

Вам нужно удалить пробелы для них, а также добавить зарезервированное слово MySQL в тики, являющееся LONG , или переименовать его в нечто, отличное от зарезервированного слова.

Т.е.

 SET `long`=:long, ... 

Справка:


Примечания:

TBH: Я не считал все ваши привязки, поэтому, если я что-то пропустил, вам нужно будет обойти их всех и убедиться, что они все совпадают.


Редактировать:

«У меня не было никаких пробелов пространства для php, подумал, что он проигнорировал их, как для C / C ++, теперь работает, спасибо вам снова! – bandos"

  • Это не C / C ++, это PHP и пробелы на этом языке.