Lo que sucede es que %d-%m-%Y es para el formato interno de MySQL, pero también son caracteres que emplea sprintf() por eso no concuerdan los
placeholders con los argumentos dados.
Debes escapar dicha secuencia interna así: %%d-%%m-%%Y
Consulta el manual:
http://php.net/sprintf