From 3160cab22bb242c3746fe770b385279f5967bc45 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Fri, 3 Sep 1999 19:54:12 +0000 Subject: [PATCH] Final MySQL tweaks --- ChangeLog | 2 + ext/mysql/{mysql.c => php_mysql.c} | 118 +++++++++++------------- ext/mysql/{php3_mysql.h => php_mysql.h} | 42 ++++----- 3 files changed, 71 insertions(+), 91 deletions(-) rename ext/mysql/{mysql.c => php_mysql.c} (92%) rename ext/mysql/{php3_mysql.h => php_mysql.h} (63%) diff --git a/ChangeLog b/ChangeLog index 0010388f83..e7550563fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ PHP 4.0 CHANGE LOG ChangeLog ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ?? 1999, Version 4.0 Beta 3 +- Return false from mysql_query() and mysql_db_query() in case saving the + result set data fails (Zeev) - Improved the resource mechanism - resources were not getting freed as soon as they could (Zeev) - Added shared memory module for session data storage (Sascha) diff --git a/ext/mysql/mysql.c b/ext/mysql/php_mysql.c similarity index 92% rename from ext/mysql/mysql.c rename to ext/mysql/php_mysql.c index df4bfaa717..f1ddd716ac 100644 --- a/ext/mysql/mysql.c +++ b/ext/mysql/php_mysql.c @@ -14,7 +14,7 @@ +----------------------------------------------------------------------+ | Authors: Zeev Suraski | +----------------------------------------------------------------------+ - */ +*/ /* $Id$ */ @@ -35,7 +35,7 @@ #include "php.h" #include "php_globals.h" #include "ext/standard/php3_standard.h" -#include "php3_mysql.h" +#include "php_mysql.h" #include "php_globals.h" @@ -142,7 +142,7 @@ function_entry mysql_functions[] = { {NULL, NULL, NULL} }; -php3_module_entry mysql_module_entry = { +zend_module_entry mysql_module_entry = { "MySQL", mysql_functions, PHP_MINIT(mysql), PHP_MSHUTDOWN(mysql), PHP_RINIT(mysql), NULL, PHP_MINFO(mysql), STANDARD_MODULE_PROPERTIES }; @@ -154,7 +154,7 @@ PHP_MYSQL_API php_mysql_globals mysql_globals; #endif #ifdef COMPILE_DL -DLEXPORT php3_module_entry *get_module(void) { return &mysql_module_entry; } +DLEXPORT zend_module_entry *get_module(void) { return &mysql_module_entry; } #endif #if APACHE @@ -177,7 +177,7 @@ static void php_mysql_set_default_link(int id) MySLS_FETCH(); if (MySG(default_link)!=-1) { - php3_list_delete(MySG(default_link)); + zend_list_delete(MySG(default_link)); } MySG(default_link) = id; zend_list_addref(id); @@ -359,7 +359,7 @@ PHP_MINFO_FUNCTION(mysql) } -static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) +static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) { #if APACHE void (*handler) (int); @@ -525,8 +525,7 @@ static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) #endif mysql = (MYSQL *) le->ptr; } - return_value->value.lval = php3_list_insert(mysql,le_plink); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql, le_plink); } else { /* non persistent */ list_entry *index_ptr,new_index_ptr; @@ -539,15 +538,11 @@ static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) int type,link; void *ptr; -#ifdef THREAD_SAFE - if (index_ptr->type != _php3_le_index_ptr()) { -#else if (index_ptr->type != le_index_ptr) { -#endif RETURN_FALSE; } link = (int) index_ptr->ptr; - ptr = php3_list_find(link,&type); /* check if the link is still there */ + ptr = zend_list_find(link,&type); /* check if the link is still there */ if (ptr && (type==le_link || type==le_plink)) { zend_list_addref(link); return_value->value.lval = link; @@ -579,16 +574,11 @@ static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) } /* add it to the list */ - return_value->value.lval = php3_list_insert(mysql,le_link); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql, le_link); /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; -#ifdef THREAD_SAFE - new_index_ptr.type = _php3_le_index_ptr(); -#else new_index_ptr.type = le_index_ptr; -#endif if (zend_hash_update(list,hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) { efree(hashed_details); RETURN_FALSE; @@ -601,11 +591,11 @@ static void php3_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) } -static int php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAMETERS MySLS_DC) +static int php_mysql_get_default_link(INTERNAL_FUNCTION_PARAMETERS MySLS_DC) { if (MySG(default_link)==-1) { /* no link opened yet, implicitly open one */ ht = 0; - php3_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); + php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } return MySG(default_link); } @@ -615,7 +605,7 @@ static int php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAMETERS MySLS_DC) Open a connection to a MySQL Server */ PHP_FUNCTION(mysql_connect) { - php3_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); + php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ @@ -624,7 +614,7 @@ PHP_FUNCTION(mysql_connect) Open a persistent connection to a MySQL Server */ PHP_FUNCTION(mysql_pconnect) { - php3_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); + php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ @@ -656,7 +646,7 @@ PHP_FUNCTION(mysql_close) mysql = (MYSQL *) zend_fetch_resource_ex(mysql_link, id, "MySQL link", 2, le_link, le_plink); ZEND_VERIFY_RESOURCE(mysql); - php3_list_delete(id); + zend_list_delete(id); RETURN_TRUE; } /* }}} */ @@ -676,7 +666,7 @@ PHP_FUNCTION(mysql_select_db) if (getParameters(ht, 1, &db)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 2: @@ -719,7 +709,7 @@ PHP_FUNCTION(mysql_create_db) if (getParameters(ht, 1, &db)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 2: @@ -760,7 +750,7 @@ PHP_FUNCTION(mysql_drop_db) if (getParameters(ht, 1, &db)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 2: @@ -803,7 +793,7 @@ PHP_FUNCTION(mysql_query) if (getParameters(ht, 1, &query)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 2: @@ -832,13 +822,14 @@ PHP_FUNCTION(mysql_query) } #endif if ((mysql_result=mysql_store_result(mysql))==NULL) { - /*php_error(E_WARNING,"Unable to save MySQL query result"); - RETURN_FALSE; - */ - RETURN_TRUE; + if (mysql_num_fields(mysql_result)>0) { /* query should have returned rows */ + php_error(E_WARNING, "MySQL: Unable to save result set"); + RETURN_FALSE; + } else { + RETURN_TRUE; + } } - return_value->value.lval = php3_list_insert(mysql_result,le_result); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); } /* }}} */ @@ -858,7 +849,7 @@ PHP_FUNCTION(mysql_db_query) if (getParameters(ht, 2, &db, &query)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 3: @@ -892,14 +883,14 @@ PHP_FUNCTION(mysql_db_query) } #endif if ((mysql_result=mysql_store_result(mysql))==NULL) { - /* - php_error(E_WARNING,"Unable to save MySQL query result"); - RETURN_FALSE; - */ - RETURN_TRUE; + if (mysql_num_fields(mysql_result)>0) { /* query should have returned rows */ + php_error(E_WARNING, "MySQL: Unable to save result set"); + RETURN_FALSE; + } else { + RETURN_TRUE; + } } - return_value->value.lval = php3_list_insert(mysql_result,le_result); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); } /* }}} */ @@ -916,7 +907,7 @@ PHP_FUNCTION(mysql_list_dbs) switch(ARG_COUNT(ht)) { case 0: - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 1: @@ -937,8 +928,7 @@ PHP_FUNCTION(mysql_list_dbs) php_error(E_WARNING,"Unable to save MySQL query result"); RETURN_FALSE; } - return_value->value.lval = php3_list_insert(mysql_result,le_result); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); } /* }}} */ @@ -958,7 +948,7 @@ PHP_FUNCTION(mysql_list_tables) if (getParameters(ht, 1, &db)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 2: @@ -983,8 +973,7 @@ PHP_FUNCTION(mysql_list_tables) php_error(E_WARNING,"Unable to save MySQL query result"); RETURN_FALSE; } - return_value->value.lval = php3_list_insert(mysql_result,le_result); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); } /* }}} */ @@ -1004,7 +993,7 @@ PHP_FUNCTION(mysql_list_fields) if (getParameters(ht, 2, &db, &table)==FAILURE) { RETURN_FALSE; } - id = php3_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU MySLS_CC); CHECK_LINK(id); break; case 3: @@ -1030,8 +1019,7 @@ PHP_FUNCTION(mysql_list_fields) php_error(E_WARNING,"Unable to save MySQL query result"); RETURN_FALSE; } - return_value->value.lval = php3_list_insert(mysql_result,le_result); - return_value->type = IS_RESOURCE; + ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); } /* }}} */ @@ -1323,7 +1311,7 @@ PHP_FUNCTION(mysql_num_fields) /* }}} */ -static void php3_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) +static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) { pval *result, *arg2; MYSQL_RES *mysql_result; @@ -1404,7 +1392,7 @@ static void php3_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) Get a result row as an enumerated array */ PHP_FUNCTION(mysql_fetch_row) { - php3_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_NUM); + php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_NUM); } /* }}} */ @@ -1413,7 +1401,7 @@ PHP_FUNCTION(mysql_fetch_row) Fetch a result row as an object */ PHP_FUNCTION(mysql_fetch_object) { - php3_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); + php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); if (return_value->type==IS_ARRAY) { return_value->type=IS_OBJECT; return_value->value.obj.properties = return_value->value.ht; @@ -1427,7 +1415,7 @@ PHP_FUNCTION(mysql_fetch_object) Fetch a result row as an associative array */ PHP_FUNCTION(mysql_fetch_array) { - php3_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); + php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ @@ -1488,7 +1476,7 @@ PHP_FUNCTION(mysql_fetch_lengths) /* }}} */ -static char *php3_mysql_get_field_name(int field_type) +static char *php_mysql_get_field_name(int field_type) { switch(field_type) { case FIELD_TYPE_STRING: @@ -1587,7 +1575,7 @@ PHP_FUNCTION(mysql_fetch_field) add_property_long(return_value, "unique_key",(mysql_field->flags&UNIQUE_KEY_FLAG?1:0)); add_property_long(return_value, "numeric",IS_NUM(mysql_field->type)?1:0); add_property_long(return_value, "blob",IS_BLOB(mysql_field->flags)?1:0); - add_property_string(return_value, "type",php3_mysql_get_field_name(mysql_field->type), 1); + add_property_string(return_value, "type",php_mysql_get_field_name(mysql_field->type), 1); add_property_long(return_value, "unsigned",(mysql_field->flags&UNSIGNED_FLAG?1:0)); add_property_long(return_value, "zerofill",(mysql_field->flags&ZEROFILL_FLAG?1:0)); } @@ -1625,7 +1613,7 @@ PHP_FUNCTION(mysql_field_seek) #define PHP3_MYSQL_FIELD_FLAGS 5 -static void php3_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) +static void php_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) { pval *result, *field; MYSQL_RES *mysql_result; @@ -1665,7 +1653,7 @@ static void php3_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) return_value->type = IS_LONG; break; case PHP3_MYSQL_FIELD_TYPE: - return_value->value.str.val = php3_mysql_get_field_name(mysql_field->type); + return_value->value.str.val = php_mysql_get_field_name(mysql_field->type); return_value->value.str.len = strlen(return_value->value.str.val); return_value->value.str.val = estrndup(return_value->value.str.val, return_value->value.str.len); return_value->type = IS_STRING; @@ -1749,7 +1737,7 @@ static void php3_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) Get the name of the specified field in a result */ PHP_FUNCTION(mysql_field_name) { - php3_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_NAME); + php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_NAME); } /* }}} */ @@ -1758,7 +1746,7 @@ PHP_FUNCTION(mysql_field_name) Get name of the table the specified field is in */ PHP_FUNCTION(mysql_field_table) { - php3_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_TABLE); + php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_TABLE); } /* }}} */ @@ -1767,7 +1755,7 @@ PHP_FUNCTION(mysql_field_table) Returns the length of the specified field */ PHP_FUNCTION(mysql_field_len) { - php3_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_LEN); + php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_LEN); } /* }}} */ @@ -1776,7 +1764,7 @@ PHP_FUNCTION(mysql_field_len) Get the type of the specified field in a result */ PHP_FUNCTION(mysql_field_type) { - php3_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_TYPE); + php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_TYPE); } /* }}} */ @@ -1785,7 +1773,7 @@ PHP_FUNCTION(mysql_field_type) Get the flags associated with the specified field in a result */ PHP_FUNCTION(mysql_field_flags) { - php3_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_FLAGS); + php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP3_MYSQL_FIELD_FLAGS); } /* }}} */ @@ -1807,7 +1795,7 @@ PHP_FUNCTION(mysql_free_result) ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); - php3_list_delete(result->value.lval); + zend_list_delete(result->value.lval); RETURN_TRUE; } /* }}} */ diff --git a/ext/mysql/php3_mysql.h b/ext/mysql/php_mysql.h similarity index 63% rename from ext/mysql/php3_mysql.h rename to ext/mysql/php_mysql.h index 49ab899a2a..0dc55a4076 100644 --- a/ext/mysql/php3_mysql.h +++ b/ext/mysql/php_mysql.h @@ -1,37 +1,26 @@ -/* +/* +----------------------------------------------------------------------+ - | PHP HTML Embedded Scripting Language Version 3.0 | + | PHP version 4.0 | +----------------------------------------------------------------------+ - | Copyright (c) 1997,1998 PHP Development Team (See Credits file) | + | Copyright (c) 1997, 1998, 1999 The PHP Group | +----------------------------------------------------------------------+ - | This program is free software; you can redistribute it and/or modify | - | it under the terms of one of the following licenses: | - | | - | A) the GNU General Public License as published by the Free Software | - | Foundation; either version 2 of the License, or (at your option) | - | any later version. | - | | - | B) the PHP License as published by the PHP Development Team and | - | included in the distribution in the file: LICENSE | - | | - | This program is distributed in the hope that it will be useful, | - | but WITHOUT ANY WARRANTY; without even the implied warranty of | - | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | - | GNU General Public License for more details. | - | | - | You should have received a copy of both licenses referred to here. | - | If you did not, or have any questions about PHP licensing, please | - | contact core@php.net. | + | This source file is subject to version 2.0 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_0.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Zeev Suraski | +----------------------------------------------------------------------+ - */ +*/ /* $Id$ */ -#ifndef _PHP3_MYSQL_H -#define _PHP3_MYSQL_H +#ifndef _PHP_MYSQL_H +#define _PHP_MYSQL_H #if COMPILE_DL #undef HAVE_MYSQL @@ -53,7 +42,8 @@ #include "TSRM.h" #endif -extern php3_module_entry mysql_module_entry; +extern zend_module_entry mysql_module_entry; + #define mysql_module_ptr &mysql_module_entry extern PHP_MINIT_FUNCTION(mysql); @@ -129,4 +119,4 @@ extern PHP_MYSQL_API php_mysql_globals mysql_globals; #define phpext_mysql_ptr mysql_module_ptr -#endif /* _PHP3_MYSQL_H */ +#endif /* _PHP_MYSQL_H */ -- 2.40.0