You don't have to set the lenght for outputting, you can do this if your want.
This is what the manual says about the difference between bindValue() and bindParam()
Binds a PHP variable to a corresponding named or question mark placeholder in the SQL >statement that was used to prepare the statement. Unlike PDOStatement::bindValue(), the >variable is bound as a reference and will only be evaluated at the time that >PDOStatement::execute() is called.
Most parameters are input parameters, that is, parameters that are used in a read-only >fashion to build up the query. Some drivers support the invocation of stored procedures >that return data as output parameters, and some also as input/output parameters that both >send in data and are updated to receive it.
I use always bindParam when I want to add a variable. But I guess you have to make your own decission for that.