Oracle
 sql >> Datenbank >  >> RDS >> Oracle

oci_bind_by_name und to_date PHP/OCI/Oracle

Sie verwenden eine Oracle-Anweisung mit gebundenen Parametern. Das ist gut, weil es SQL-Injections verhindert, bei denen gefährlicher Code in Ihre SQL-Anweisung eingefügt wird. In diesem Fall verhindert es jedoch den TO_CHAR Funktion nicht ausgeführt wird. Stattdessen wird versucht, den gesamten String in einen Zeitstempel umzuwandeln, was natürlich nicht funktioniert.

Die Lösung ist ziemlich einfach:Wechseln Sie zu TO_CHAR Funktion weg vom gebundenen Parameter direkt in die Anweisung:

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