@@ -787,35 +787,52 @@ static int _php_ibase_bind(XSQLDA *sqlda, zval *b_vars, BIND_BUF *buf, /* {{{ */
787787 }
788788 continue ;
789789
790- case SQL_BOOLEAN :
791-
792- convert_to_string (b_var );
793- var -> sqldata = Z_STRVAL_P (b_var );
794- var -> sqllen = Z_STRLEN_P (b_var );
795- var -> sqltype = SQL_BOOLEAN ;
796- continue ;
797-
798- if (Z_STRLEN_P (b_var ) != BLOB_ID_LEN ||
799- !_php_ibase_string_to_quad (Z_STRVAL_P (b_var ), & buf [i ].val .qval )) {
800-
801- ibase_blob ib_blob = { 0 , BLOB_INPUT };
802-
803- if (isc_create_blob (IB_STATUS , & ib_query -> link -> handle ,
804- & ib_query -> trans -> handle , & ib_blob .bl_handle , & ib_blob .bl_qd )) {
805- _php_ibase_error ();
806- return FAILURE ;
807- }
790+ case SQL_BOOLEAN :
791+
792+ switch (Z_TYPE_P (b_var )) {
793+ case IS_LONG :
794+ case IS_DOUBLE :
795+ case IS_TRUE :
796+ case IS_FALSE :
797+ * (bool * )var -> sqldata = zend_is_true (b_var ) ? 1 : 0 ;
798+ break ;
799+ case IS_STRING :
800+ zend_long lval ;
801+ double dval ;
808802
809- if (_php_ibase_blob_add (b_var , & ib_blob ) != SUCCESS ) {
810- return FAILURE ;
811- }
803+ if ((Z_STRLEN_P (b_var ) == 0 )) {
804+ * (bool * )var -> sqldata = 0 ;
805+ break ;
806+ }
812807
813- if (isc_close_blob (IB_STATUS , & ib_blob .bl_handle )) {
814- _php_ibase_error ();
815- return FAILURE ;
816- }
817- buf [i ].val .qval = ib_blob .bl_qd ;
808+ switch (is_numeric_string (Z_STRVAL_P (b_var ), Z_STRLEN_P (b_var ), & lval , & dval , 0 )) {
809+ case IS_LONG :
810+ * (bool * )var -> sqldata = (lval != 0 ) ? 1 : 0 ;
811+ break ;
812+ case IS_DOUBLE :
813+ * (bool * )var -> sqldata = (dval != 0 ) ? 1 : 0 ;
814+ break ;
815+ default :
816+ if (!zend_binary_strncasecmp (Z_STRVAL_P (b_var ), Z_STRLEN_P (b_var ), "true" , 4 , 4 )) {
817+ * (bool * )var -> sqldata = 1 ;
818+ } else if (!zend_binary_strncasecmp (Z_STRVAL_P (b_var ), Z_STRLEN_P (b_var ), "false" , 5 , 5 )) {
819+ * (bool * )var -> sqldata = 1 ;
820+ } else {
821+ _php_ibase_module_error ("Parameter %d: cannot convert string to boolean" , i + 1 );
822+ rv = FAILURE ;
823+ continue ;
824+ }
825+ }
826+ break ;
827+ case IS_NULL :
828+ * var -> sqlind = -1 ;
829+ break ;
830+ default :
831+ _php_ibase_module_error ("Parameter %d: must be boolean" , i + 1 );
832+ rv = FAILURE ;
833+ continue ;
818834 }
835+ var -> sqltype = SQL_BOOLEAN ;
819836 continue ;
820837
821838 case SQL_ARRAY :
0 commit comments