Oracle
 sql >> Base de données >  >> RDS >> Oracle

oci_bind_by_name et to_date PHP/OCI/Oracle

Vous utilisez une instruction Oracle avec des paramètres liés. C'est bien car cela empêche les injections SQL où du code dangereux est inséré dans votre instruction SQL. Cependant, dans ce cas, cela empêche le TO_CHAR fonction d'être exécutée. Au lieu de cela, il essaie de convertir la chaîne entière en un horodatage, ce qui bien sûr ne fonctionne pas.

La solution est plutôt simple :passez à TO_CHAR fonction loin du paramètre lié directement dans l'instruction :

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