sql >> Base de Datos >  >> RDS >> Oracle

oci_bind_by_name y to_date PHP/OCI/Oracle

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'))";