📄 php_mysql.c
字号:
{ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); RETURN_STRING((char *)mysql_get_host_info(&mysql->conn),1);}/* }}} *//* {{{ proto int mysql_get_proto_info([int link_identifier]) Returns the protocol version used by current connection */PHP_FUNCTION(mysql_get_proto_info){ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); RETURN_LONG(mysql_get_proto_info(&mysql->conn));}/* }}} *//* {{{ proto string mysql_get_server_info([int link_identifier]) Returns a string that represents the server version number */PHP_FUNCTION(mysql_get_server_info){ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); RETURN_STRING((char *)mysql_get_server_info(&mysql->conn),1);}/* }}} *//* {{{ proto string mysql_info([int link_identifier]) Returns a string containing information about the most recent query */PHP_FUNCTION(mysql_info){ zval *mysql_link; int id = -1; char *str; php_mysql_conn *mysql; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) { return; } if (ZEND_NUM_ARGS() == 0) { id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink); if ((str = (char *)mysql_info(&mysql->conn))) { RETURN_STRING(str,1); } else { RETURN_FALSE; }}/* }}} *//* {{{ proto int mysql_thread_id([int link_identifier]) Returns the thread id of current connection */PHP_FUNCTION(mysql_thread_id){ zval *mysql_link = NULL; int id = -1; php_mysql_conn *mysql; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) { return; } if (ZEND_NUM_ARGS() == 0) { id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink); RETURN_LONG(mysql_thread_id(&mysql->conn));}/* }}} *//* {{{ proto string mysql_stat([int link_identifier]) Returns a string containing status information */PHP_FUNCTION(mysql_stat){ zval *mysql_link = NULL; int id = -1; php_mysql_conn *mysql; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) { return; } if (ZEND_NUM_ARGS() == 0) { id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink); PHPMY_UNBUFFERED_QUERY_CHECK(); RETURN_STRING((char *)mysql_stat(&mysql->conn), 1);}/* }}} *//* {{{ proto string mysql_client_encoding([int link_identifier]) Returns the default character set for the current connection */PHP_FUNCTION(mysql_client_encoding){ zval *mysql_link = NULL; int id = -1; php_mysql_conn *mysql; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) { return; } if (ZEND_NUM_ARGS() == 0) { id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink); RETURN_STRING((char *)mysql_character_set_name(&mysql->conn), 1);}/* }}} */#endif#ifndef NETWARE /* The below two functions not supported on NetWare */#if MYSQL_VERSION_ID < 40000/* {{{ proto bool mysql_create_db(string database_name [, int link_identifier]) Create a MySQL database */PHP_FUNCTION(mysql_create_db){ zval **db, **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &db)==FAILURE) { RETURN_FALSE; } id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL CREATE DATABASE statement instead."); ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); PHPMY_UNBUFFERED_QUERY_CHECK(); convert_to_string_ex(db); if (mysql_create_db(&mysql->conn, Z_STRVAL_PP(db))==0) { RETURN_TRUE; } else { RETURN_FALSE; }}/* }}} *//* {{{ proto bool mysql_drop_db(string database_name [, int link_identifier]) Drops (delete) a MySQL database */PHP_FUNCTION(mysql_drop_db){ zval **db, **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &db)==FAILURE) { RETURN_FALSE; } id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL DROP DATABASE statement instead."); ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); convert_to_string_ex(db); if (mysql_drop_db(&mysql->conn, Z_STRVAL_PP(db))==0) { RETURN_TRUE; } else { RETURN_FALSE; }}/* }}} */#endif#endif /* NETWARE *//* {{{ php_mysql_do_query_general */static void php_mysql_do_query_general(zval **query, zval **mysql_link, int link_id, zval **db, int use_store, zval *return_value TSRMLS_DC){ php_mysql_conn *mysql; MYSQL_RES *mysql_result; ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, link_id, "MySQL-Link", le_link, le_plink); if (db) { convert_to_string_ex(db); if (!php_mysql_select_db(mysql, Z_STRVAL_PP(db) TSRMLS_CC)) { RETURN_FALSE; } } PHPMY_UNBUFFERED_QUERY_CHECK(); convert_to_string_ex(query); /* check explain */ if (MySG(trace_mode)) { if (!strncasecmp("select", Z_STRVAL_PP(query), 6)){ MYSQL_ROW row; char *newquery = (char *)emalloc(Z_STRLEN_PP(query) + 10); sprintf ((char *)newquery, "EXPLAIN %s", Z_STRVAL_PP(query)); mysql_real_query(&mysql->conn, newquery, strlen(newquery)); efree (newquery); if (mysql_errno(&mysql->conn)) { php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "%s", mysql_error(&mysql->conn)); RETURN_FALSE; } else { mysql_result = mysql_use_result(&mysql->conn); while ((row = mysql_fetch_row(mysql_result))) { if (!strcmp("ALL", row[1])) { php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "Your query requires a full tablescan (table %s, %s rows affected). Use EXPLAIN to optimize your query.", row[0], row[6]); } else if (!strcmp("INDEX", row[1])) { php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "Your query requires a full indexscan (table %s, %s rows affected). Use EXPLAIN to optimize your query.", row[0], row[6]); } } mysql_free_result(mysql_result); } } } /* end explain */ /* mysql_query is binary unsafe, use mysql_real_query */#if MYSQL_VERSION_ID > 32199 if (mysql_real_query(&mysql->conn, Z_STRVAL_PP(query), Z_STRLEN_PP(query))!=0) { /* check possible error */ if (MySG(trace_mode)){ if (mysql_errno(&mysql->conn)){ php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "%s", mysql_error(&mysql->conn)); } } RETURN_FALSE; }#else if (mysql_query(&mysql->conn, Z_STRVAL_PP(query))!=0) { /* check possible error */ if (MySG(trace_mode)){ if (mysql_errno(&mysql->conn)){ php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, mysql_error(&mysql->conn)); } } RETURN_FALSE; }#endif if(use_store == MYSQL_USE_RESULT) { mysql_result=mysql_use_result(&mysql->conn); } else { mysql_result=mysql_store_result(&mysql->conn); } if (!mysql_result) { if (PHP_MYSQL_VALID_RESULT(&mysql->conn)) { /* query should have returned rows */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save result set"); RETURN_FALSE; } else { RETURN_TRUE; } } MySG(result_allocated)++; ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); if (use_store == MYSQL_USE_RESULT) { mysql->active_result_id = Z_LVAL_P(return_value); }}/* }}} *//* {{{ php_mysql_do_query */static void php_mysql_do_query(INTERNAL_FUNCTION_PARAMETERS, int use_store){ zval **query, **mysql_link; int id; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &query)==FAILURE) { RETURN_FALSE; } id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &query, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } php_mysql_do_query_general(query, mysql_link, id, NULL, use_store, return_value TSRMLS_CC);}/* }}} *//* {{{ proto resource mysql_query(string query [, int link_identifier]) Sends an SQL query to MySQL */PHP_FUNCTION(mysql_query){ php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT);}/* }}} *//* {{{ proto resource mysql_unbuffered_query(string query [, int link_identifier]) Sends an SQL query to MySQL, without fetching and buffering the result rows */PHP_FUNCTION(mysql_unbuffered_query){ php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_USE_RESULT);}/* }}} *//* {{{ proto resource mysql_db_query(string database_name, string query [, int link_identifier]) Sends an SQL query to MySQL */PHP_FUNCTION(mysql_db_query){ zval **db, **query, **mysql_link; int id; switch(ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &db, &query)==FAILURE) { RETURN_FALSE; } id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 3: if (zend_get_parameters_ex(3, &db, &query, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } if (MySG(trace_mode) || !strcasecmp(get_active_function_name(TSRMLS_C), "mysql")) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated; use mysql_query() instead."); } php_mysql_do_query_general(query, mysql_link, id, db, MYSQL_STORE_RESULT, return_value TSRMLS_CC);}/* }}} *//* {{{ proto resource mysql_list_dbs([int link_identifier]) List databases available on a MySQL server */PHP_FUNCTION(mysql_list_dbs){ zval **mysql_link; int id; php_mysql_conn *mysql; MYSQL_RES *mysql_result; switch(ZEND_NUM_ARGS()) { case 0: id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -