}
efree(S);
+ stmt->driver_data = NULL;
+
return 1;
} /* }}} */
Z_STRLEN_P(param->parameter) = param->max_value_len;
Z_STRVAL_P(param->parameter) = emalloc(Z_STRLEN_P(param->parameter)+1);
+ P->used_for_output = 1;
P->actual_len = Z_STRLEN_P(param->parameter);
*alenpp = &P->actual_len;
case PDO_PARAM_STR:
default:
P->oci_type = SQLT_CHR;
- convert_to_string(param->parameter);
value_sz = param->max_value_len + 1;
- P->actual_len = Z_STRLEN_P(param->parameter);
+ if (param->max_value_len == 0) {
+ value_sz = 4000; /* maximum size before value is interpreted as a LONG value */
+ }
}
case PDO_PARAM_EVT_EXEC_PRE:
P->indicator = 0;
+ P->used_for_output = 0;
return 1;
case PDO_PARAM_EVT_EXEC_POST:
/* fixup stuff set in motion in oci_bind_output_cb */
- if (P->indicator == -1) {
- /* set up a NULL value */
- if (Z_TYPE_P(param->parameter) == IS_STRING
+ if (P->used_for_output) {
+ if (P->indicator == -1) {
+ /* set up a NULL value */
+ if (Z_TYPE_P(param->parameter) == IS_STRING
#if ZEND_EXTENSION_API_NO < 220040718
&& Z_STRVAL_P(param->parameter) != empty_string
#endif
- ) {
- /* OCI likes to stick non-terminated strings in things */
- *Z_STRVAL_P(param->parameter) = '\0';
- }
- zval_dtor(param->parameter);
- ZVAL_NULL(param->parameter);
- } else if (Z_TYPE_P(param->parameter) == IS_STRING
+ ) {
+ /* OCI likes to stick non-terminated strings in things */
+ *Z_STRVAL_P(param->parameter) = '\0';
+ }
+ zval_dtor(param->parameter);
+ ZVAL_NULL(param->parameter);
+ } else if (Z_TYPE_P(param->parameter) == IS_STRING
#if ZEND_EXTENSION_API_NO < 220040718
&& Z_STRVAL_P(param->parameter) != empty_string
#endif
- ) {
- Z_STRLEN_P(param->parameter) = P->actual_len;
- Z_STRVAL_P(param->parameter) = erealloc(Z_STRVAL_P(param->parameter), P->actual_len+1);
- Z_STRVAL_P(param->parameter)[P->actual_len] = '\0';
+ ) {
+ Z_STRLEN_P(param->parameter) = P->actual_len;
+ Z_STRVAL_P(param->parameter) = erealloc(Z_STRVAL_P(param->parameter), P->actual_len+1);
+ Z_STRVAL_P(param->parameter)[P->actual_len] = '\0';
+ }
}
return 1;