Está utilizando una declaración de Oracle con parámetros enlazados. Eso es bueno porque evita las inyecciones de SQL donde se inserta código peligroso en su declaración de SQL. Sin embargo, en este caso, evita que TO_CHAR
función de ser ejecutada. En su lugar, intenta convertir toda la cadena en una marca de tiempo, lo que por supuesto no funciona.
La solución es bastante sencilla:vaya a TO_CHAR
función fuera del parámetro enlazado directamente en la instrucción:
$REGISTERED_TIMESTAMP = "15-08-2011 14:32:37";
$query = "INSERT INTO ".$db_schema.".ARTIFACTS (ARTIFACT_ID, ARTIFACT_NAME, ARTIFACT_TYPE, ARTIFACT_LOCATION, ARTIFACT_DOMAIN, ARTIFACT_AUTHOR, ARTIFACT_LABEL, AUDIT_CONSTRAINTS, SECURITY_CONSTRAINTS, REGISTERED_EMAIL, REGISTERED_TIMESTAMP)
VALUES (:bind1, :bind2, :bind3, :bind4, :bind5, :bind6, :bind7, :bind8,
:bind9, :bind10, to_date(:bind11, 'DD-MM-YYYY HH24:MI:SS'))";