📄 php_mysql.c
字号:
ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); PHPMY_UNBUFFERED_QUERY_CHECK(); if ((mysql_result=mysql_list_dbs(&mysql->conn, NULL))==NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);}/* }}} *//* {{{ proto resource mysql_list_tables(string database_name [, int link_identifier]) List tables in a MySQL database */PHP_FUNCTION(mysql_list_tables){ zval **db, **mysql_link; int id; php_mysql_conn *mysql; MYSQL_RES *mysql_result; 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; } ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); convert_to_string_ex(db); if (!php_mysql_select_db(mysql, Z_STRVAL_PP(db) TSRMLS_CC)) { RETURN_FALSE; } PHPMY_UNBUFFERED_QUERY_CHECK(); if ((mysql_result=mysql_list_tables(&mysql->conn, NULL))==NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);}/* }}} *//* {{{ proto resource mysql_list_fields(string database_name, string table_name [, int link_identifier]) List MySQL result fields */PHP_FUNCTION(mysql_list_fields){ zval **db, **table, **mysql_link; int id; php_mysql_conn *mysql; MYSQL_RES *mysql_result; switch(ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &db, &table)==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, &table, &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); 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(table); if ((mysql_result=mysql_list_fields(&mysql->conn, Z_STRVAL_PP(table), NULL))==NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);}/* }}} *//* {{{ proto resource mysql_list_processes([int link_identifier]) Returns a result set describing the current server threads */PHP_FUNCTION(mysql_list_processes){ zval *mysql_link = NULL; int id = -1; php_mysql_conn *mysql; MYSQL_RES *mysql_result; 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(); mysql_result = mysql_list_processes(&mysql->conn); if (mysql_result == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);}/* }}} *//* {{{ proto string mysql_error([int link_identifier]) Returns the text of the error message from previous MySQL operation */PHP_FUNCTION(mysql_error){ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = MySG(default_link); if (id==-1) { if (MySG(connect_error)!=NULL){ RETURN_STRING(MySG(connect_error),1); } else { RETURN_FALSE; } } 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_error(&mysql->conn), 1);}/* }}} *//* {{{ proto int mysql_errno([int link_identifier]) Returns the number of the error message from previous MySQL operation */#ifdef HAVE_MYSQL_ERRNOPHP_FUNCTION(mysql_errno){ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = MySG(default_link); if (id==-1) { if (MySG(connect_errno)!=0){ RETURN_LONG(MySG(connect_errno)); } else { RETURN_FALSE; } } 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_errno(&mysql->conn));}#endif/* }}} *//* {{{ proto int mysql_affected_rows([int link_identifier]) Gets number of affected rows in previous MySQL operation */PHP_FUNCTION(mysql_affected_rows){ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = MySG(default_link); 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); /* conversion from int64 to long happing here */ Z_LVAL_P(return_value) = (long) mysql_affected_rows(&mysql->conn); Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ proto string mysql_escape_string(string to_be_escaped) Escape string for mysql query */PHP_FUNCTION(mysql_escape_string){ zval **str; if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &str) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(str); /* assume worst case situation, which is 2x of the original string. * we don't realloc() down to the real size since it'd most probably not * be worth it */ Z_STRVAL_P(return_value) = (char *) safe_emalloc(Z_STRLEN_PP(str), 2, 1); Z_STRLEN_P(return_value) = mysql_escape_string(Z_STRVAL_P(return_value), Z_STRVAL_PP(str), Z_STRLEN_PP(str)); Z_TYPE_P(return_value) = IS_STRING; if (MySG(trace_mode)){ php_error_docref("function.mysql-real-escape-string" TSRMLS_CC, E_WARNING, "This function is deprecated; use mysql_real_escape_string() instead."); }}/* }}} *//* {{{ proto string mysql_real_escape_string(string to_be_escaped [, int link_identifier]) Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection */PHP_FUNCTION(mysql_real_escape_string){ zval *mysql_link = NULL; char *str; char *new_str; int id = -1, str_len, new_str_len; php_mysql_conn *mysql; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &str, &str_len, &mysql_link) == FAILURE) { return; } if (ZEND_NUM_ARGS() == 1) { 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); new_str = emalloc(str_len * 2 + 1); new_str_len = mysql_real_escape_string(&mysql->conn, new_str, str, str_len); new_str = erealloc(new_str, new_str_len + 1); RETURN_STRINGL(new_str, new_str_len, 0);}/* }}} *//* {{{ proto int mysql_insert_id([int link_identifier]) Gets the ID generated from the previous INSERT operation */PHP_FUNCTION(mysql_insert_id){ zval **mysql_link; int id; php_mysql_conn *mysql; switch(ZEND_NUM_ARGS()) { case 0: id = MySG(default_link); 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); /* conversion from int64 to long happing here */ Z_LVAL_P(return_value) = (long) mysql_insert_id(&mysql->conn); Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ proto mixed mysql_result(resource result, int row [, mixed field]) Gets result data */PHP_FUNCTION(mysql_result){ zval **result, **row, **field=NULL; MYSQL_RES *mysql_result; MYSQL_ROW sql_row; mysql_row_length_type *sql_row_lengths; int field_offset=0; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &result, &row)==FAILURE) { RETURN_FALSE; } break; case 3: if (zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); convert_to_long_ex(row); if (Z_LVAL_PP(row)<0 || Z_LVAL_PP(row)>=(int)mysql_num_rows(mysql_result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to jump to row %ld on MySQL result index %ld", Z_LVAL_PP(row), Z_LVAL_PP(result)); RETURN_FALSE; } mysql_data_seek(mysql_result, Z_LVAL_PP(row)); if ((sql_row=mysql_fetch_row(mysql_result))==NULL || (sql_row_lengths=mysql_fetch_lengths(mysql_result))==NULL) { /* shouldn't happen? */ RETURN_FALSE; } if (field) { switch(Z_TYPE_PP(field)) { case IS_STRING: { int i=0; MYSQL_FIELD *tmp_field; char *table_name, *field_name, *tmp; if ((tmp=strchr(Z_STRVAL_PP(field), '.'))) { table_name = estrndup(Z_STRVAL_PP(field), tmp-Z_STRVAL_PP(field)); field_name = estrdup(tmp+1); } else { table_name = NULL; field_name = estrndup(Z_STRVAL_PP(field),Z_STRLEN_PP(field)); } mysql_field_seek(mysql_result, 0); while ((tmp_field=mysql_fetch_field(mysql_result))) { if ((!table_name || !strcasecmp(tmp_field->table, table_name)) && !strcasecmp(tmp_field->name, field_name)) { field_offset = i; break; } i++; } if (!tmp_field) { /* no match found */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s%s%s not found in MySQL result index %ld", (table_name?table_name:""), (table_name?".":""), field_name, Z_LVAL_PP(result)); efree(field_name); if (table_name) { efree(table_name); } RETURN_FALSE; } efree(field_name); if (table_name) { efree(table_name); } } break; default: convert_to_long_ex(field); field_offset = Z_LVAL_PP(field); if (field_offset<0 || field_offset>=(int)mysql_num_fields(mysql_result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified"); RETURN_FALSE; } break; } } if (sql_row[field_offset]) { Z_TYPE_P(return_value) = IS_STRING; if (PG(magic_quotes_runtime)) { Z_STRVAL_P(return_value) = php_addslashes(sql_row[field_offset], sql_row_lengths[field_offset],&Z_STRLEN_P(return_value), 0 TSRMLS_CC); } else { Z_STRLEN_P(return_value) = sql_row_lengths[field_offset]; Z_STRVAL_P(return_value) = (char *) safe_estrndup(sql_row[field_offset], Z_STRLEN_P(return_value)); } } else { Z_TYPE_P(return_value) = IS_NULL; }}/* }}} *//* {{{ proto int mysql_num_rows(resource result) Gets number of rows in a result */PHP_FUNCTION(mysql_num_rows){ zval **result; MYSQL_RES *mysql_result; if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); /* conversion from int64 to long happing here */ Z_LVAL_P(return_value) = (long) mysql_num_rows(mysql_result); Z_TYPE_P(return_value) = IS_LONG;}/* }}} *//* {{{ proto int mysql_num_fields(resource result) Gets number of fields in a result */PHP_FUNCTION(mysql_num_fields){ zval **result; MYSQL_RES *mysql_result; if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) { WRONG_PARAM_COUNT; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -