提交 33b698b4 编写于 作者: H heyanlong

pdo

上级 c1437566
...@@ -131,45 +131,70 @@ ZEND_API void sky_execute_internal(zend_execute_data *execute_data, zval *return ...@@ -131,45 +131,70 @@ ZEND_API void sky_execute_internal(zend_execute_data *execute_data, zval *return
|| strcmp(function_name, "query") == 0 || strcmp(function_name, "query") == 0
|| strcmp(function_name, "prepare") == 0 || strcmp(function_name, "prepare") == 0
|| strcmp(function_name, "commit") == 0) { || strcmp(function_name, "commit") == 0) {
component = (char *)emalloc(strlen("PDO") + 1); component = (char *) emalloc(strlen("PDO") + 1);
strcpy(component, "PDO"); strcpy(component, "PDO");
operationName = (char*)emalloc(strlen(class_name) + strlen(function_name) + 3); operationName = (char *) emalloc(strlen(class_name) + strlen(function_name) + 3);
strcpy(operationName, class_name);
strcat(operationName, "->");
strcat(operationName, function_name);
}
} else if (strcmp(class_name, "PDOStatement") == 0) {
if (strcmp(function_name, "execute") == 0) {
component = (char *) emalloc(strlen("PDOStatement") + 1);
strcpy(component, "PDOStatement");
operationName = (char *) emalloc(strlen(class_name) + strlen(function_name) + 3);
strcpy(operationName, class_name); strcpy(operationName, class_name);
strcat(operationName, "->"); strcat(operationName, "->");
strcat(operationName, function_name); strcat(operationName, function_name);
} }
} }
} else if (function_name != NULL) { } else if (function_name != NULL) {
} }
if (operationName != NULL) { if (operationName != NULL) {
zval tags; zval tags;
array_init(&tags); array_init(&tags);
// params
uint32_t arg_count = ZEND_CALL_NUM_ARGS(execute_data);
if(arg_count) {
zval *p = ZEND_CALL_ARG(execute_data, 1);
//db.statement
switch (Z_TYPE_P(p)) {
case IS_STRING:
add_assoc_string(&tags, "db.statement", Z_STRVAL_P(p));
if (strcmp(class_name, "PDO") == 0) {
// params
uint32_t arg_count = ZEND_CALL_NUM_ARGS(execute_data);
if (arg_count) {
zval *p = ZEND_CALL_ARG(execute_data, 1);
//db.statement
switch (Z_TYPE_P(p)) {
case IS_STRING:
add_assoc_string(&tags, "db.statement", Z_STRVAL_P(p));
}
} }
}
if(strcmp(class_name, "PDO") == 0) {
char db_type[64] = {0}; char db_type[64] = {0};
pdo_dbh_t *dbh = Z_PDO_DBH_P(&(execute_data->This)); pdo_dbh_t *dbh = Z_PDO_DBH_P(&(execute_data->This));
if (dbh != NULL) { if (dbh != NULL) {
if (dbh->driver != NULL && dbh->driver->driver_name != NULL) { if (dbh->driver != NULL && dbh->driver->driver_name != NULL) {
memcpy(db_type, (char *)dbh->driver->driver_name, dbh->driver->driver_name_len); memcpy(db_type, (char *) dbh->driver->driver_name, dbh->driver->driver_name_len);
add_assoc_string(&tags, "db.type", db_type); add_assoc_string(&tags, "db.type", db_type);
} }
if (dbh->data_source != NULL && db_type[0] != '\0') { if (dbh->data_source != NULL && db_type[0] != '\0') {
add_assoc_string(&tags, "db.data_source", dbh->data_source); add_assoc_string(&tags, "db.data_source", (char *) dbh->data_source);
}
}
} else if (strcmp(class_name, "PDOStatement") == 0) {
char db_type[64] = {0};
pdo_stmt_t *stmt = (pdo_stmt_t *) Z_PDO_STMT_P(&(execute_data->This));
if (stmt != NULL) {
add_assoc_string(&tags, "db.statement", stmt->query_string);
if (stmt->dbh != NULL && stmt->dbh->driver->driver_name != NULL) {
memcpy(db_type, (char *) stmt->dbh->driver->driver_name, stmt->dbh->driver->driver_name_len);
add_assoc_string(&tags, "db.type", db_type);
}
if (db_type[0] != '\0' && stmt->dbh != NULL && stmt->dbh->data_source != NULL) {
add_assoc_string(&tags, "db.data_source", (char *) stmt->dbh->data_source);
} }
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册