61 spprintf(&message, 0,
"%s [%d] (severity %d) [%s]",
75static void dblib_handle_closer(
pdo_dbh_t *dbh)
90 dbh->driver_data =
NULL;
100 stmt->driver_data =
S;
103 S->computed_column_name_count = 0;
104 S->err.sqlstate = stmt->error_code;
114 dbsetuserdata(
H->link, (BYTE*)&
H->err);
120 if (
FAIL == dbsqlexec(
H->link)) {
124 resret = dbresults(
H->link);
126 if (resret ==
FAIL) {
130 ret = dbnextrow(
H->link);
135 if (dbnumcols(
H->link) <= 0) {
136 return DBCOUNT(
H->link);
142 return DBCOUNT(
H->link);
148 bool use_national_character_set = 0;
151 size_t quotedlen = 0, extralen = 0;
154 if (
H->assume_national_character_set_strings) {
155 use_national_character_set = 1;
158 use_national_character_set = 1;
161 use_national_character_set = 0;
165 for (i = 0; i <
ZSTR_LEN(unquoted); i++) {
166 if (
ZSTR_VAL(unquoted)[i] ==
'\'') ++extralen;
171 if (use_national_character_set) {
179 quotedlen += extralen;
180 quoted_str = zend_string_alloc(quotedlen, 0);
182 if (use_national_character_set) {
187 for (i = 0; i <
ZSTR_LEN(unquoted); i++) {
188 if (
ZSTR_VAL(unquoted)[i] ==
'\'') {
201static bool pdo_dblib_transaction_cmd(
const char *cmd,
pdo_dbh_t *dbh)
205 if (
FAIL == dbcmd(
H->link, cmd)) {
209 if (
FAIL == dbsqlexec(
H->link)) {
216static bool dblib_handle_begin(
pdo_dbh_t *dbh)
218 return pdo_dblib_transaction_cmd(
"BEGIN TRANSACTION", dbh);
221static bool dblib_handle_commit(
pdo_dbh_t *dbh)
223 return pdo_dblib_transaction_cmd(
"COMMIT TRANSACTION", dbh);
226static bool dblib_handle_rollback(
pdo_dbh_t *dbh)
228 return pdo_dblib_transaction_cmd(
"ROLLBACK TRANSACTION", dbh);
244 if (
FAIL == dbcmd(
H->link,
"SELECT @@IDENTITY")) {
248 if (
FAIL == dbsqlexec(
H->link)) {
252 ret = dbresults(
H->link);
258 ret = dbnextrow(
H->link);
265 if (dbdatlen(
H->link, 1) == 0) {
271 len = dbconvert(
NULL, (dbcoltype(
H->link, 1)) , (dbdata(
H->link, 1)) , (dbdatlen(
H->link, 1)),
SQLCHAR, (BYTE *)
id, (DBINT)-1);
274 ret_id = zend_string_init(
id,
len, 0);
297 return SUCCEED == dbsettime(lval);
302 H->stringify_uniqueidentifier = bval;
308 H->skip_empty_rowsets = bval;
314 H->datetime_convert = bval;
431 dblib_handle_preparer,
436 dblib_handle_rollback,
449static int pdo_dblib_handle_factory(
pdo_dbh_t *dbh,
zval *driver_options)
452 int i, nvars, nvers,
ret = 0;
456 ,{
"4.6",DBVERSION_46}
457 ,{
"5.0",DBVERSION_70}
458 ,{
"6.0",DBVERSION_70}
459 ,{
"7.0",DBVERSION_70}
461 ,{
"7.1",DBVERSION_71}
464 ,{
"7.2",DBVERSION_72}
465 ,{
"8.0",DBVERSION_72}
468 ,{
"7.3",DBVERSION_73}
471 ,{
"7.4",DBVERSION_74}
473 ,{
"10.0",DBVERSION_100}
479 {
"charset",
NULL, 0 }
481 ,{
"host",
"127.0.0.1", 0 }
482 ,{
"dbname",
NULL, 0 }
483 ,{
"secure",
NULL, 0 }
484 ,{
"version",
NULL, 0 }
486 ,{
"password",
NULL, 0 }
489 nvars =
sizeof(vars)/
sizeof(vars[0]);
490 nvers =
sizeof(tdsver)/
sizeof(tdsver[0]);
495 H->login = dblogin();
497 H->assume_national_character_set_strings = 0;
498 H->stringify_uniqueidentifier = 0;
499 H->skip_empty_rowsets = 0;
500 H->datetime_convert = 0;
506 if (driver_options) {
511 if (connect_timeout == -1) {
512 connect_timeout = timeout;
514 if (query_timeout == -1) {
515 query_timeout = timeout;
518 dbsetlogintime(connect_timeout);
519 dbsettime(query_timeout);
531 for(i=0;i<nvers;i++) {
533 if(
FAIL==dbsetlversion(
H->login, tdsver[i].value)) {
548 if (!dbh->
username && vars[6].optval) {
558 if (!dbh->
password && vars[7].optval) {
568#ifndef PHP_DBLIB_IS_MSSQL
570 DBSETLCHARSET(
H->login, vars[0].optval);
574 DBSETLAPP(
H->login, vars[1].optval);
579 if(
FAIL == DBSETLDBNAME(
H->login, vars[3].optval))
goto cleanup;
583 H->link = dbopen(
H->login, vars[2].optval);
595 if(
FAIL == dbuse(
H->link, vars[3].optval))
goto cleanup;
599#ifdef PHP_DBLIB_IS_MSSQL
601 DBSETOPT(
H->link, DBTEXTLIMIT,
"2147483647");
605 DBSETOPT(
H->link, DBTEXTSIZE,
"2147483647");
615 for (i = 0; i < nvars; i++) {
626 "SQLSTATE[%s] %s (severity %d)",
636#ifdef PDO_DBLIB_IS_MSSQL
638#elif defined(PHP_WIN32)
639#define PDO_DBLIB_IS_SYBASE
644 pdo_dblib_handle_factory
printf(string $format, mixed ... $values)
const pdo_driver_t pdo_dblib_driver
zval * pdo_dblib_datatypes
zend_string * dblib_handle_last_id(pdo_dbh_t *dbh, const zend_string *name)
const struct pdo_stmt_methods dblib_stmt_methods
PDO_API int php_pdo_parse_data_source(const char *data_source, zend_ulong data_source_len, struct pdo_data_src_parser *parsed, int nparams)
PDO_API zend_class_entry * php_pdo_get_exception(void)
PDO_API bool pdo_get_long_param(zend_long *lval, zval *value)
void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, pdo_error_type sqlstate, const char *supp)
PDO_API bool pdo_get_bool_param(bool *bval, zval *value)
int pdo_dblib_error_handler(DBPROCESS *dbproc, int severity, int dberr, int oserr, char *dberrstr, char *oserrstr)
void pdo_dblib_err_dtor(pdo_dblib_err *err)
int pdo_dblib_msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate, int severity, char *msgtext, char *srvname, char *procname, int line)
#define DBERRHANDLE(a, b)
#define DBMSGHANDLE(a, b)
#define DBSETOPT(a, b, c)
@ PDO_DBLIB_ATTR_QUERY_TIMEOUT
@ PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS
@ PDO_DBLIB_ATTR_DATETIME_CONVERT
@ PDO_DBLIB_ATTR_TDS_VERSION
@ PDO_DBLIB_ATTR_CONNECTION_TIMEOUT
@ PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER
#define PDO_DBLIB_FLAVOUR
struct _pdo_dbh_t pdo_dbh_t
#define PDO_DRIVER_HEADER(name)
struct _pdo_stmt_t pdo_stmt_t
@ PDO_ATTR_EMULATE_PREPARES
@ PDO_ATTR_DEFAULT_STR_PARAM
unsigned char key[REFLECTION_KEY_LEN]
unsigned max_escaped_char_length
pdo_error_type error_code
unsigned alloc_own_columns
const struct pdo_dbh_methods * methods
zend_string * active_query_string
ZEND_API zend_result add_next_index_long(zval *arg, zend_long n)
ZEND_API zend_result add_next_index_string(zval *arg, const char *str)
#define ZVAL_STRING(z, s)
#define pestrdup(s, persistent)
#define ecalloc(nmemb, size)
#define pefree(ptr, persistent)
#define pecalloc(nmemb, size, persistent)
strcmp(string $string1, string $string2)
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
struct _zend_string zend_string
#define UNEXPECTED(condition)