It might have been mentioned here before, but I'll put it as explicitly as possible:
There were 2 errors, the first error you fixed yourself by making sure that `Symbol`,`Company_Name`,`Last_Price`,...,`Mktcap` had the same amount of items as the amount of ?'s in your VALUES-list.
The second error means that mysql now expects values when you execute your query ($sth->execute(@h);). Apparently, your @h contains only 29 values, but there are 43 ?'s that need to be given something (a value or 'undef' if you want it to be NULL).
If you want to fill all the extra columns (that you initially added all those ?'s for) to be NULL, why don't you just do that in your query?