From: Wez Furlong Date: Wed, 9 Mar 2005 02:13:06 +0000 (+0000) Subject: probably fix for ? placeholders not working with oci X-Git-Tag: RELEASE_0_3~16 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3efc383a0785f2ac3665e371e7c5c19ba004537b;p=php probably fix for ? placeholders not working with oci --- diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c index 3e843c260f..2b7505b484 100755 --- a/ext/pdo_oci/oci_driver.c +++ b/ext/pdo_oci/oci_driver.c @@ -208,6 +208,9 @@ static int oci_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pd pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data; pdo_oci_stmt *S = ecalloc(1, sizeof(*S)); ub4 prefetch; + char *nsql = NULL; + int nsql_len = 0; + int ret; #if HAVE_OCISTMTFETCH2 S->exec_type = pdo_attr_lval(driver_options, PDO_ATTR_CURSOR, @@ -218,8 +221,19 @@ static int oci_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pd #endif S->H = H; + stmt->supports_placeholders = PDO_PLACEHOLDER_NAMED; + ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len TSRMLS_CC); + + if (ret == 1) { + /* query was re-written */ + sql = nsql; + } else if (ret == -1) { + /* couldn't grok it */ + strcpy(dbh->error_code, stmt->error_code); + efree(S); + return 0; + } - /* create an OCI statement handle */ OCIHandleAlloc(H->env, (dvoid*)&S->stmt, OCI_HTYPE_STMT, 0, NULL); @@ -228,7 +242,10 @@ static int oci_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pd if (sql_len) { H->last_err = OCIStmtPrepare(S->stmt, H->err, (text*)sql, sql_len, OCI_NTV_SYNTAX, OCI_DEFAULT); - + if (nsql) { + efree(nsql); + nsql = NULL; + } if (H->last_err) { H->last_err = oci_drv_error("OCIStmtPrepare"); OCIHandleFree(S->stmt, OCI_HTYPE_STMT); @@ -252,7 +269,10 @@ static int oci_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pd stmt->driver_data = S; stmt->methods = &oci_stmt_methods; - stmt->supports_placeholders = PDO_PLACEHOLDER_NAMED; + if (nsql) { + efree(nsql); + nsql = NULL; + } return 1; }