A mi me duele la cabeza cuando leo estos códigos, pero lo que note es que a tu sprintf y le pasas como referencia un string a un id que en teoría debe ser numérico entero.
http://php.net/manual/en/function.sprintf.php
s - the argument is treated as and presented as a string.
d - the argument is treated as an integer, and presented as a (signed) decimal number.
Quizas sea ese la causa del fallo.
Saludos