That’s strange, both in that just using bindParam() instead of passing an array seems to make it work, and in that casting your string for insertion into a varchar(150) column to an integer lets it work.
I should add - I use individual bindParam statements to pass parameters into queries, but talked about the array instead because you mentioned you have a lot of parameters to pass in.