summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2003-12-13 00:28:21 +0000
committerGeorg Richter <georg@php.net>2003-12-13 00:28:21 +0000
commit8b3b1c192b30d64af8bd498bf55e88277826c229 (patch)
tree5463218065bbcc2eb255f31c6207e781e8cccf28
parentb1f8236b63ae9ee1f3cec490f093cbb8cfff407f (diff)
downloadphp-git-8b3b1c192b30d64af8bd498bf55e88277826c229.tar.gz
removed profiler
added mysqli_report - better support for errors - support for no_index_used and bad_index_used typos and prototype fixes
-rw-r--r--ext/mysqli/config.m42
-rw-r--r--ext/mysqli/mysqli.c52
-rw-r--r--ext/mysqli/mysqli_api.c369
-rw-r--r--ext/mysqli/mysqli_fe.c4
-rw-r--r--ext/mysqli/mysqli_nonapi.c88
-rw-r--r--ext/mysqli/mysqli_report.c83
-rw-r--r--ext/mysqli/mysqli_report.h52
-rw-r--r--ext/mysqli/php_mysqli.h51
8 files changed, 327 insertions, 374 deletions
diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4
index 90e2e60725..634d861cf3 100644
--- a/ext/mysqli/config.m4
+++ b/ext/mysqli/config.m4
@@ -50,6 +50,6 @@ if test "$PHP_MYSQLI" != "no"; then
$MYSQLI_LIBLINE
])
- PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_prop.c mysqli_nonapi.c mysqli_fe.c mysqli_profiler.c mysqli_profiler_com.c, $ext_shared)
+ PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_prop.c mysqli_nonapi.c mysqli_fe.c mysqli_report.c, $ext_shared)
PHP_SUBST(MYSQLI_SHARED_LIBADD)
fi
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index 1b8a14861b..55e06e7bb8 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -40,7 +40,6 @@ static HashTable classes;
static HashTable mysqli_link_properties;
static HashTable mysqli_result_properties;
static HashTable mysqli_stmt_properties;
-PR_MAIN *prmain;
extern void php_mysqli_connect(INTERNAL_FUNCTION_PARAMETERS);
typedef int (*mysqli_read_t)(mysqli_object *obj, zval **retval TSRMLS_DC);
@@ -238,7 +237,7 @@ void mysqli_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
}
/* }}} */
-
+/* {{{ void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) */
void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) {
mysqli_prop_handler p;
@@ -247,6 +246,7 @@ void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli
zend_hash_add(h, pname, strlen(pname) + 1, &p, sizeof(mysqli_prop_handler), NULL);
}
+/* }}} */
/* {{{ mysqli_objects_new
*/
@@ -267,7 +267,8 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_
ALLOC_HASHTABLE(intern->zo.properties);
zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+ zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,
+ (void *) &tmp, sizeof(zval *));
retval.handle = zend_objects_store_put(intern, mysqli_objects_dtor, mysqli_objects_clone TSRMLS_CC);
retval.handlers = &mysqli_object_handlers;
@@ -324,7 +325,8 @@ static void php_mysqli_init_globals(zend_mysqli_globals *mysqli_globals)
mysqli_globals->default_user = NULL;
mysqli_globals->default_pw = NULL;
mysqli_globals->default_socket = NULL;
- mysqli_globals->profiler = 0;
+ mysqli_globals->report_mode = 0;
+ mysqli_globals->report_ht = 0;
mysqli_globals->multi_query = 0;
}
/* }}} */
@@ -447,10 +449,11 @@ PHP_MINIT_FUNCTION(mysqli)
/* bind blob support */
REGISTER_LONG_CONSTANT("MYSQLI_NO_DATA", MYSQL_NO_DATA, CONST_CS | CONST_PERSISTENT);
- /* profiler support */
- REGISTER_LONG_CONSTANT("MYSQLI_PR_REPORT_STDERR", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_PR_REPORT_PORT", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_PR_REPORT_FILE", 3, CONST_CS | CONST_PERSISTENT);
+ /* reporting */
+ REGISTER_LONG_CONSTANT("MYSQLI_REPORT_INDEX", MYSQLI_REPORT_INDEX, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("MYSQLI_REPORT_ERROR", MYSQLI_REPORT_ERROR, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("MYSQLI_REPORT_CLOSE", MYSQLI_REPORT_CLOSE, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("MYSQLI_REPORT_ALL", MYSQLI_REPORT_ALL, CONST_CS | CONST_PERSISTENT);
return SUCCESS;
}
@@ -470,7 +473,6 @@ PHP_MSHUTDOWN_FUNCTION(mysqli)
}
/* }}} */
-/* Remove if there's nothing to do at request start */
/* {{{ PHP_RINIT_FUNCTION
*/
PHP_RINIT_FUNCTION(mysqli)
@@ -482,7 +484,6 @@ PHP_RINIT_FUNCTION(mysqli)
}
/* }}} */
-/* Remove if there's nothing to do at request end */
/* {{{ PHP_RSHUTDOWN_FUNCTION
*/
PHP_RSHUTDOWN_FUNCTION(mysqli)
@@ -490,19 +491,6 @@ PHP_RSHUTDOWN_FUNCTION(mysqli)
if (MyG(error_msg)) {
efree(MyG(error_msg));
}
-
- if (MyG(profiler)) {
- if (prmain->header.child) {
- php_mysqli_profiler_report((PR_COMMON *)prmain, 0);
- }
- switch (prmain->mode) {
- case MYSQLI_PR_REPORT_FILE:
- fclose(prmain->fp);
- efree(prmain->name);
- break;
- }
- }
-
return SUCCESS;
}
/* }}} */
@@ -534,8 +522,6 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags
MYSQL_FIELD *fields;
MYSQL_ROW row;
unsigned long *field_len;
- PR_RESULT *prresult;
- PR_COMMAND *prcommand;
zval *ctor_params = NULL;
zend_class_entry *ce = NULL;
@@ -570,15 +556,16 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags
}
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
-
- MYSQLI_PROFILER_COMMAND_START(prcommand, prresult);
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
- fields = mysql_fetch_fields(result);
if (!(row = mysql_fetch_row(result))) {
RETURN_NULL();
}
+ if (fetchtype & MYSQLI_ASSOC) {
+ fields = mysql_fetch_fields(result);
+ }
+
array_init(return_value);
field_len = mysql_fetch_lengths(result);
@@ -678,13 +665,6 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags
zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name);
}
}
-
- if (MyG(profiler)) {
- char tmp[10];
- sprintf ((char *)&tmp,"row[%d]", mysql_num_fields(result));
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, tmp);
- prresult->fetched_rows++;
- }
}
/* }}} */
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 382855929d..e5d4a06d1b 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -36,19 +36,15 @@ PHP_FUNCTION(mysqli_affected_rows)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
my_ulonglong rc;
- PR_COMMAND *prcommand;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return; /* Should this be RETURN_FALSE? */
+ return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
rc = mysql_affected_rows(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, (long)rc);
MYSQLI_RETURN_LONG_LONG(rc);
}
/* }}} */
@@ -59,19 +55,15 @@ PHP_FUNCTION(mysqli_autocommit)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
unsigned long rc;
unsigned long automode;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ob", &mysql_link, mysqli_link_class_entry, &automode) == FAILURE) {
- return; /* Should this be RETURN_FALSE? */
+ return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
rc = (long) mysql_autocommit(mysql, automode);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
RETURN_BOOL(rc);
}
@@ -91,8 +83,6 @@ PHP_FUNCTION(mysqli_bind_param)
zval *mysql_stmt;
MYSQL_BIND *bind;
zval *types;
- PR_STMT *prstmt;
- PR_COMMAND *prcommand;
HashPosition hpos;
unsigned long rc;
@@ -111,7 +101,7 @@ PHP_FUNCTION(mysqli_bind_param)
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
if (getThis()) {
start = 1;
@@ -183,9 +173,8 @@ PHP_FUNCTION(mysqli_bind_param)
zend_hash_move_forward_ex(Z_ARRVAL_P(types), &hpos);
}
- MYSQLI_PROFILER_COMMAND_START(prcommand, prstmt);
rc = mysql_bind_param(stmt->stmt, bind);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
+ MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
if (rc) {
efree(args);
@@ -230,8 +219,6 @@ PHP_FUNCTION(mysqli_bind_result)
STMT *stmt;
zval *mysql_stmt;
MYSQL_BIND *bind;
- PR_STMT *prstmt;
- PR_COMMAND *prcommand;
if (argc < (getThis() ? 1 : 2)) {
WRONG_PARAM_COUNT;
@@ -252,7 +239,7 @@ PHP_FUNCTION(mysqli_bind_result)
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
var_cnt = argc - start;
@@ -326,9 +313,8 @@ PHP_FUNCTION(mysqli_bind_result)
}
}
- MYSQLI_PROFILER_COMMAND_START(prcommand, prstmt);
rc = mysql_bind_result(stmt->stmt, bind);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
+ MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
if (rc) {
efree(bind);
@@ -361,17 +347,14 @@ PHP_FUNCTION(mysqli_change_user)
char *user, *password, *dbname;
int user_len, password_len, dbname_len;
ulong rc;
- PR_COMMAND *prcommand;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osss", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
rc = mysql_change_user(mysql, user, password, dbname);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
if (rc) {
RETURN_FALSE;
@@ -387,19 +370,15 @@ PHP_FUNCTION(mysqli_character_set_name)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
char *charsetname;
- PR_COMMAND *prcommand;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
charsetname = (char *)mysql_character_set_name(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, charsetname);
RETURN_STRING(charsetname, 1);
}
@@ -410,25 +389,16 @@ PHP_FUNCTION(mysqli_character_set_name)
PHP_FUNCTION(mysqli_close)
{
zval *mysql_link;
- PR_MYSQL *prmysql;
MYSQL *mysql;
- PR_COMMON *current;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
mysql_close(mysql);
- if (MyG(profiler)) {
- prmysql->closed = 1;
- }
- current = (PR_COMMON *)prmysql;
- if (MyG(profiler)) {
- php_mysqli_profiler_report(current, 0);
- }
MYSQLI_CLEAR_RESOURCE(&mysql_link);
RETURN_TRUE;
}
@@ -440,17 +410,13 @@ PHP_FUNCTION(mysqli_commit)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
ulong rc;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
rc = mysql_commit(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
RETURN_BOOL(rc);
}
/* }}} */
@@ -461,24 +427,20 @@ PHP_FUNCTION(mysqli_data_seek)
{
MYSQL_RES *result;
zval *mysql_result;
- PR_RESULT *prresult;
- PR_COMMAND *prcommand;
long offset;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT");
RETURN_LONG(0);
}
- MYSQLI_PROFILER_COMMAND_START(prcommand, prresult);
mysql_data_seek(result, offset);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL);
return;
}
/* }}} */
@@ -489,15 +451,12 @@ PHP_FUNCTION(mysqli_debug)
{
char *debug;
int debug_len;
- PR_COMMAND *prcommand;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &debug, &debug_len) == FAILURE) {
return;
}
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmain);
mysql_debug(debug);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL);
RETURN_TRUE;
}
/* }}} */
@@ -508,16 +467,12 @@ PHP_FUNCTION(mysqli_disable_reads_from_master)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
mysql_disable_reads_from_master(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL);
RETURN_TRUE;
}
/* }}} */
@@ -528,16 +483,12 @@ PHP_FUNCTION(mysqli_disable_rpl_parse)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
mysql_disable_rpl_parse(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL);
RETURN_TRUE;
}
/* }}} */
@@ -548,18 +499,14 @@ PHP_FUNCTION(mysqli_dump_debug_info)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
ulong rc;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
rc = mysql_dump_debug_info(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
if (rc) {
RETURN_FALSE;
@@ -574,17 +521,13 @@ PHP_FUNCTION(mysqli_enable_reads_from_master)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
mysql_enable_reads_from_master(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL);
RETURN_TRUE;
}
/* }}} */
@@ -595,17 +538,13 @@ PHP_FUNCTION(mysqli_enable_rpl_parse)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
- PR_COMMAND *prcommand;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql);
mysql_enable_rpl_parse(mysql);
- MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL);
RETURN_TRUE;
}
/* }}} */
@@ -616,12 +555,11 @@ PHP_FUNCTION(mysqli_errno)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_errno(mysql));
}
/* }}} */
@@ -632,12 +570,11 @@ PHP_FUNCTION(mysqli_error)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_STRING((char *)mysql_error(mysql),1);
}
/* }}} */
@@ -649,12 +586,11 @@ PHP_FUNCTION(mysqli_execute)
STMT *stmt;
zval *mysql_stmt;
unsigned int i;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
for (i = 0; i < stmt->param.var_cnt; i++) {
if (stmt->param.vars[i]) {
@@ -681,6 +617,7 @@ PHP_FUNCTION(mysqli_execute)
}
if (mysql_execute(stmt->stmt)) {
+ MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -695,12 +632,11 @@ PHP_FUNCTION(mysqli_fetch)
zval *mysql_stmt;
unsigned int i;
ulong ret;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
/* reset buffers */
@@ -751,6 +687,8 @@ PHP_FUNCTION(mysqli_fetch)
stmt->result.vars[i]->type = IS_NULL;
}
}
+ } else {
+ MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
}
RETURN_LONG(ret);
@@ -764,13 +702,12 @@ PHP_FUNCTION(mysqli_fetch_field)
MYSQL_RES *result;
zval *mysql_result;
MYSQL_FIELD *field;
- PR_RESULT *prresult;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (!(field = mysql_fetch_field(result))) {
RETURN_FALSE;
@@ -798,7 +735,6 @@ PHP_FUNCTION(mysqli_fetch_fields)
zval *mysql_result;
MYSQL_FIELD *field;
zval *obj;
- PR_RESULT *prresult;
unsigned int i;
@@ -806,7 +742,7 @@ PHP_FUNCTION(mysqli_fetch_fields)
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (!(field = mysql_fetch_field(result))) {
RETURN_FALSE;
@@ -844,13 +780,12 @@ PHP_FUNCTION(mysqli_fetch_field_direct)
zval *mysql_result;
MYSQL_FIELD *field;
int offset;
- PR_RESULT *prresult;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (!(field = mysql_fetch_field_direct(result,offset))) {
RETURN_FALSE;
@@ -878,14 +813,12 @@ PHP_FUNCTION(mysqli_fetch_lengths)
zval *mysql_result;
unsigned int i;
unsigned long *ret;
- PR_RESULT *prresult;
-
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (!(ret = mysql_fetch_lengths(result))) {
RETURN_FALSE;
@@ -914,12 +847,11 @@ PHP_FUNCTION(mysqli_field_count)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_field_count(mysql));
}
@@ -933,12 +865,11 @@ PHP_FUNCTION(mysqli_field_seek)
MYSQL_RES *result;
zval *mysql_result;
unsigned int fieldnr;
- PR_RESULT *prresult;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &fieldnr) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (fieldnr < 0 || fieldnr >= mysql_num_fields(result)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field offset is invalid for resultset");
@@ -956,12 +887,11 @@ PHP_FUNCTION(mysqli_field_tell)
{
MYSQL_RES *result;
zval *mysql_result;
- PR_RESULT *prresult;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
RETURN_LONG(mysql_field_tell(result));
}
@@ -973,17 +903,13 @@ PHP_FUNCTION(mysqli_free_result)
{
MYSQL_RES *result;
zval *mysql_result;
- PR_RESULT *prresult;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
mysql_free_result(result);
- if (MyG(profiler)) {
- prresult->closed = 1;
- }
MYSQLI_CLEAR_RESOURCE(&mysql_result);
RETURN_TRUE;
@@ -1004,12 +930,11 @@ PHP_FUNCTION(mysqli_get_host_info)
{
MYSQL *mysql;
zval *mysql_link = NULL;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_STRING((char *)mysql_get_host_info(mysql), 1);
}
@@ -1021,12 +946,11 @@ PHP_FUNCTION(mysqli_get_proto_info)
{
MYSQL *mysql;
zval *mysql_link = NULL;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_get_proto_info(mysql));
}
@@ -1038,12 +962,11 @@ PHP_FUNCTION(mysqli_get_server_info)
{
MYSQL *mysql;
zval *mysql_link = NULL;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_STRING((char *)mysql_get_server_info(mysql), 1);
}
@@ -1056,12 +979,11 @@ PHP_FUNCTION(mysqli_get_server_version)
{
MYSQL *mysql;
zval *mysql_link = NULL;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_get_server_version(mysql));
}
@@ -1075,12 +997,11 @@ PHP_FUNCTION(mysqli_info)
MYSQL *mysql;
char *info = NULL;
zval *mysql_link = NULL;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (!(info = (char *)mysql_info(mysql))) {
RETURN_FALSE;
@@ -1107,12 +1028,11 @@ PHP_FUNCTION(mysqli_insert_id)
MYSQL *mysql;
my_ulonglong rc;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
rc = mysql_insert_id(mysql);
MYSQLI_RETURN_LONG_LONG(rc)
}
@@ -1125,17 +1045,16 @@ PHP_FUNCTION(mysqli_kill)
MYSQL *mysql;
zval *mysql_link;
int processid;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &processid) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_kill(mysql, processid)) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
RETURN_FALSE;
}
-
RETURN_TRUE;
}
/* }}} */
@@ -1147,12 +1066,11 @@ PHP_FUNCTION(mysqli_master_query) {
zval *mysql_link;
char *query = NULL;
unsigned int query_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_master_query(mysql, query, query_len)) {
RETURN_FALSE;
@@ -1166,12 +1084,11 @@ PHP_FUNCTION(mysqli_master_query) {
PHP_FUNCTION(mysqli_more_results) {
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (!mysql_more_results(mysql)) {
RETURN_FALSE;
@@ -1185,12 +1102,11 @@ PHP_FUNCTION(mysqli_more_results) {
PHP_FUNCTION(mysqli_next_result) {
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_next_result(mysql)) {
RETURN_FALSE;
@@ -1205,13 +1121,11 @@ PHP_FUNCTION(mysqli_num_fields)
{
MYSQL_RES *result;
zval *mysql_result;
- PR_RESULT *prresult;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
-
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
RETURN_LONG(mysql_num_fields(result));
}
@@ -1223,23 +1137,19 @@ PHP_FUNCTION(mysqli_num_rows)
{
MYSQL_RES *result;
zval *mysql_result;
- PR_RESULT *prresult;
- PR_COMMAND *prcommand;
ulong rc;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result");
+ MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT");
RETURN_LONG(0);
}
- MYSQLI_PROFILER_COMMAND_START(prcommand, prresult);
rc = mysql_num_rows(result);
- MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc);
RETURN_LONG(rc);
}
/* }}} */
@@ -1254,12 +1164,11 @@ PHP_FUNCTION(mysqli_options)
long mysql_option;
unsigned int l_value;
long ret;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
switch (Z_TYPE_PP(&mysql_value)) {
case IS_STRING:
@@ -1286,12 +1195,11 @@ PHP_FUNCTION(mysqli_param_count)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_LONG(mysql_param_count(stmt->stmt));
}
@@ -1303,13 +1211,15 @@ PHP_FUNCTION(mysqli_ping)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
+ long rc;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_ping(mysql));
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
+ rc = mysql_ping(mysql);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ RETURN_LONG(rc);
}
/* }}} */
@@ -1319,8 +1229,6 @@ PHP_FUNCTION(mysqli_prepare)
{
MYSQL *mysql;
STMT *stmt;
- PR_MYSQL *prmysql;
- PR_STMT *prstmt = NULL;
char *query = NULL;
unsigned int query_len;
zval *mysql_link;
@@ -1329,34 +1237,14 @@ PHP_FUNCTION(mysqli_prepare)
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",&mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
stmt = (STMT *)ecalloc(1,sizeof(STMT));
- /* profiling information */
- if (MyG(profiler)) {
- prstmt = (PR_STMT *)MYSQLI_PROFILER_NEW(prmysql, MYSQLI_PR_STMT, 1);
- prstmt->explain.query = my_estrdup(query);
- if (!strncasecmp("select", query, 6)){
- if (!(MYSQLI_PROFILER_EXPLAIN(&prstmt->explain, &prstmt->header, mysql, query))) {
- RETURN_FALSE;
- }
- }
- }
stmt->stmt = mysql_prepare(mysql, query, query_len);
- if (MyG(profiler)) {
- MYSQLI_PROFILER_ELAPSEDTIME(prstmt);
- if (!stmt->stmt) {
- prstmt->header.error = mysql_errno(mysql);
- prstmt->header.errormsg = my_estrdup(mysql_error(mysql));
- } else {
- prstmt->param_cnt = mysql_param_count(stmt->stmt);
- prstmt->field_cnt = stmt->stmt->field_count;
- }
- }
-
if (!stmt->stmt) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
efree(stmt);
RETURN_FALSE;
}
@@ -1368,27 +1256,26 @@ PHP_FUNCTION(mysqli_prepare)
/* }}} */
/* {{{ proto resource mysqli_get_metadata(object stmt)
- */
+ return result set from statement */
PHP_FUNCTION(mysqli_get_metadata)
{
STMT *stmt;
MYSQL_RES *result;
zval *mysql_stmt;
- PR_STMT *prstmt = NULL;
MYSQLI_RESOURCE *mysqli_resource;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
if (!(result = mysql_get_metadata(stmt->stmt))){
+ MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
RETURN_FALSE;
}
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)result;
- mysqli_resource->prinfo = (void *)prstmt;
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
}
/* }}} */
@@ -1399,12 +1286,11 @@ PHP_FUNCTION(mysqli_read_query_result)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_read_query_result(mysql)) {
RETURN_FALSE;
@@ -1423,7 +1309,6 @@ PHP_FUNCTION(mysqli_real_connect)
unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len;
unsigned int port=0, flags=0;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sssslsl", &mysql_link, mysqli_link_class_entry,
&hostname, &hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len,
@@ -1449,7 +1334,7 @@ PHP_FUNCTION(mysqli_real_connect)
}
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
/* remove some insecure options */
flags ^= CLIENT_MULTI_STATEMENTS; /* don't allow multi_queries via connect parameter */
@@ -1458,10 +1343,13 @@ PHP_FUNCTION(mysqli_real_connect)
}
if (mysql_real_connect(mysql,hostname,username,passwd,dbname,port,socket,flags) == NULL) {
- /* Save error messages */
- php_mysqli_set_error(mysql_errno(mysql), (char *)mysql_error(mysql) TSRMLS_CC);
+
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ php_mysqli_set_error(mysql_errno(mysql), (char *) mysql_error(mysql) TSRMLS_CC);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql));
+ if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql));
+ }
RETURN_FALSE;
}
php_mysqli_set_error(mysql_errno(mysql), (char *)mysql_error(mysql) TSRMLS_CC);
@@ -1478,17 +1366,25 @@ PHP_FUNCTION(mysqli_real_query)
zval *mysql_link;
char *query = NULL;
unsigned int query_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
+
+ MYSQLI_DISABLE_MQ; /* disable multi statements/queries */
- MYSQLI_DISABLE_MQ;
if (mysql_real_query(mysql, query, query_len)) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
RETURN_FALSE;
- }
+ }
+
+ if (!mysql_field_count(mysql)) {
+ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
+ php_mysqli_report_index(query, mysql->server_status);
+ }
+ }
+
RETURN_TRUE;
}
/* }}} */
@@ -1500,12 +1396,11 @@ PHP_FUNCTION(mysqli_real_escape_string) {
zval *mysql_link = NULL;
char *escapestr, *newstr;
int escapestr_len, newstr_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &escapestr, &escapestr_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
newstr = safe_emalloc(2, escapestr_len, 1);
newstr_len = mysql_real_escape_string(mysql, newstr, escapestr, escapestr_len);
@@ -1515,35 +1410,17 @@ PHP_FUNCTION(mysqli_real_escape_string) {
}
/* }}} */
-/* {{{ proto bool mysqli_reload (object link)
-*/
-PHP_FUNCTION(mysqli_reload)
-{
- MYSQL *mysql;
- zval *mysql_link;
- PR_MYSQL *prmysql;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_BOOL(!mysql_reload(mysql));
-}
-/* }}} */
-
/* {{{ proto bool mysqli_rollback(object link)
Undo actions from current transaction */
PHP_FUNCTION(mysqli_rollback)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_BOOL(mysql_rollback(mysql));
}
@@ -1555,12 +1432,11 @@ PHP_FUNCTION(mysqli_rpl_parse_enabled)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_rpl_parse_enabled(mysql));
}
@@ -1572,12 +1448,11 @@ PHP_FUNCTION(mysqli_rpl_probe)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_rpl_probe(mysql)) {
@@ -1595,12 +1470,11 @@ PHP_FUNCTION(mysqli_rpl_query_type)
zval *mysql_link;
char *query;
int query_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_rpl_query_type(query, query_len));
}
@@ -1612,7 +1486,6 @@ PHP_FUNCTION(mysqli_send_long_data)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
char *data;
long param_nr, data_len;
@@ -1620,7 +1493,7 @@ PHP_FUNCTION(mysqli_send_long_data)
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols", &mysql_stmt, mysqli_stmt_class_entry, &param_nr, &data, &data_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
if (!param_nr) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number");
@@ -1643,12 +1516,11 @@ PHP_FUNCTION(mysqli_send_query)
zval *mysql_link;
char *query = NULL;
unsigned int query_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_send_query(mysql, query, query_len)) {
RETURN_FALSE;
@@ -1659,7 +1531,7 @@ PHP_FUNCTION(mysqli_send_query)
#ifdef HAVE_EMBEDDED_MYSQLI
/* {{{ proto bool mysqli_server_init(void)
- initialize embedded server */
+ initialize embedded server */
PHP_FUNCTION(mysqli_server_init)
{
zval *server;
@@ -1691,7 +1563,6 @@ PHP_FUNCTION(mysqli_server_end)
/* }}} */
#endif
-
/* {{{ proto bool mysqli_slave_query(object link, string query)
Enforce execution of a query on a slave in a master/slave setup */
PHP_FUNCTION(mysqli_slave_query)
@@ -1700,12 +1571,11 @@ PHP_FUNCTION(mysqli_slave_query)
zval *mysql_link;
char *query = NULL;
unsigned int query_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (mysql_slave_query(mysql, query, query_len)) {
RETURN_FALSE;
@@ -1721,12 +1591,11 @@ PHP_FUNCTION(mysqli_stmt_affected_rows)
STMT *stmt;
zval *mysql_stmt;
my_ulonglong rc;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
rc = mysql_stmt_affected_rows(stmt->stmt);
MYSQLI_RETURN_LONG_LONG(rc)
@@ -1739,12 +1608,11 @@ PHP_FUNCTION(mysqli_stmt_close)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
mysql_stmt_close(stmt->stmt);
stmt->stmt = NULL;
php_clear_stmt_bind(stmt);
@@ -1760,14 +1628,13 @@ PHP_FUNCTION(mysqli_stmt_data_seek)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
long offset;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &offset) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
mysql_stmt_data_seek(stmt->stmt, offset);
return;
@@ -1781,13 +1648,12 @@ PHP_FUNCTION(mysqli_stmt_num_rows)
STMT *stmt;
zval *mysql_stmt;
my_ulonglong rc;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
rc = mysql_stmt_num_rows(stmt->stmt);
MYSQLI_RETURN_LONG_LONG(rc)
@@ -1802,18 +1668,18 @@ PHP_FUNCTION(mysqli_select_db)
zval *mysql_link;
char *dbname;
int dbname_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &dbname, &dbname_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (!mysql_select_db(mysql, dbname)) {
RETURN_TRUE;
}
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
RETURN_FALSE;
}
/* }}} */
@@ -1825,12 +1691,11 @@ PHP_FUNCTION(mysqli_sqlstate)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_STRING((char *)mysql_sqlstate(mysql),1);
}
#endif
@@ -1844,13 +1709,12 @@ PHP_FUNCTION(mysqli_ssl_set)
zval *mysql_link;
char *key=NULL, *cert=NULL, *ca=NULL, *capath=NULL, *cipher=NULL;
int key_len, cert_len, ca_len, capath_len, cipher_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osssss", &mysql_link, mysqli_link_class_entry,
&key, &key_len, &cert, &cert_len, &ca, &ca_len, &capath, &capath_len, &cipher, &cipher_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
mysql_ssl_set(mysql, key, cert, ca, capath, cipher);
@@ -1864,12 +1728,11 @@ PHP_FUNCTION(mysqli_stat)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_STRING((char *)mysql_stat(mysql), 1);
}
@@ -1882,12 +1745,11 @@ PHP_FUNCTION(mysqli_stmt_errno)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_LONG(mysql_stmt_errno(stmt->stmt));
}
@@ -1899,12 +1761,11 @@ PHP_FUNCTION(mysqli_stmt_error)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_STRING((char *)mysql_stmt_error(stmt->stmt),1);
}
@@ -1916,14 +1777,14 @@ PHP_FUNCTION(mysqli_stmt_store_result)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
if (mysql_stmt_store_result(stmt->stmt)){
+ MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -1937,12 +1798,11 @@ PHP_FUNCTION(mysqli_stmt_sqlstate)
{
STMT *stmt;
zval *mysql_stmt;
- PR_STMT *prstmt;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_STRING((char *)mysql_stmt_sqlstate(stmt->stmt),1);
}
@@ -1956,19 +1816,22 @@ PHP_FUNCTION(mysqli_store_result)
MYSQL *mysql;
MYSQL_RES *result;
zval *mysql_link;
- PR_MYSQL *prmysql;
MYSQLI_RESOURCE *mysqli_resource;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (!(result = mysql_store_result(mysql))) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
MYSQLI_DISABLE_MQ;
RETURN_FALSE;
}
-// MYSQLI_DISABLE_MQ;
+ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
+ php_mysqli_report_index("from previous mysql_real_connect", mysql->server_status);
+ }
+ MYSQLI_DISABLE_MQ;
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)result;
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
@@ -1981,12 +1844,11 @@ PHP_FUNCTION(mysqli_thread_id)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_thread_id(mysql));
}
@@ -2008,17 +1870,23 @@ PHP_FUNCTION(mysqli_use_result)
MYSQL *mysql;
MYSQL_RES *result;
zval *mysql_link;
- PR_MYSQL *prmysql;
MYSQLI_RESOURCE *mysqli_resource;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
if (!(result = mysql_use_result(mysql))) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ MYSQLI_DISABLE_MQ;
RETURN_FALSE;
}
+
+ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
+ php_mysqli_report_index("from previous mysql_real_connect", mysql->server_status);
+ }
+
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)result;
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
@@ -2031,12 +1899,11 @@ PHP_FUNCTION(mysqli_warning_count)
{
MYSQL *mysql;
zval *mysql_link;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
RETURN_LONG(mysql_warning_count(mysql));
}
diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c
index 7e8eb87595..62a88a5f6d 100644
--- a/ext/mysqli/mysqli_fe.c
+++ b/ext/mysqli/mysqli_fe.c
@@ -104,7 +104,7 @@ function_entry mysqli_functions[] = {
PHP_FE(mysqli_param_count, NULL)
PHP_FE(mysqli_ping, NULL)
PHP_FE(mysqli_prepare, NULL)
- PHP_FE(mysqli_profiler, NULL)
+ PHP_FE(mysqli_report, NULL)
PHP_FE(mysqli_query, NULL)
PHP_FE(mysqli_read_query_result, NULL)
PHP_FE(mysqli_real_connect, NULL)
@@ -112,7 +112,6 @@ function_entry mysqli_functions[] = {
PHP_FALIAS(mysqli_escape_string,
mysqli_real_escape_string, NULL)
PHP_FE(mysqli_real_query, NULL)
- PHP_FE(mysqli_reload, NULL)
PHP_FE(mysqli_rollback, NULL)
PHP_FE(mysqli_rpl_parse_enabled, NULL)
PHP_FE(mysqli_rpl_probe, NULL)
@@ -189,7 +188,6 @@ function_entry mysqli_link_methods[] = {
PHP_FALIAS(real_escape_string,mysqli_real_escape_string,NULL)
PHP_FALIAS(escape_string, mysqli_real_escape_string,NULL)
PHP_FALIAS(real_query,mysqli_real_query,NULL)
- PHP_FALIAS(reload,mysqli_reload,NULL)
PHP_FALIAS(rollback,mysqli_rollback,NULL)
PHP_FALIAS(rpl_parse_enabled,mysqli_rpl_parse_enabled,NULL)
PHP_FALIAS(rpl_probe,mysqli_rpl_probe,NULL)
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 44d7e5011f..20f7718318 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -35,12 +35,10 @@ PHP_FUNCTION(mysqli_connect)
{
MYSQL *mysql;
MYSQLI_RESOURCE *mysqli_resource;
- PR_MYSQL *prmysql = NULL;
zval *object = getThis();
char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL;
unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len;
unsigned int port=0;
- struct timeval starttime;
if (getThis() && !ZEND_NUM_ARGS()) {
RETURN_NULL();
@@ -63,38 +61,29 @@ PHP_FUNCTION(mysqli_connect)
}
}
}
- }
- mysql = mysql_init(NULL);
-
- if (MyG(profiler)){
- gettimeofday(&starttime, NULL);
}
+ mysql = mysql_init(NULL);
+
if (mysql_real_connect(mysql,hostname,username,passwd,dbname,port,socket,0) == NULL) {
/* Save error messages */
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
php_mysqli_set_error(mysql_errno(mysql), (char *) mysql_error(mysql) TSRMLS_CC);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql));
+ if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql));
+ }
/* free mysql structure */
mysql_close(mysql);
RETURN_FALSE;
}
- php_mysqli_set_error(mysql_errno(mysql), (char *) mysql_error(mysql) TSRMLS_CC);
- if (MyG(profiler)) {
- prmysql = (PR_MYSQL *)MYSQLI_PROFILER_NEW(prmain, MYSQLI_PR_MYSQL, 0);
- php_mysqli_profiler_timediff(starttime, &prmysql->header.elapsedtime);
- MYSQLI_PROFILER_STARTTIME(prmysql);
- prmysql->hostname = estrdup(hostname);
- prmysql->username = estrdup(username);
- prmysql->thread_id = mysql->thread_id;
- }
+ /* clear error */
+ php_mysqli_set_error(mysql_errno(mysql), (char *) mysql_error(mysql) TSRMLS_CC);
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)mysql;
- mysqli_resource->prinfo = prmysql;
-
if (!object) {
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
@@ -111,7 +100,6 @@ PHP_FUNCTION(mysqli_embedded_connect)
{
MYSQL *mysql;
MYSQLI_RESOURCE *mysqli_resource;
- PR_MYSQL *prmysql = NULL;
zval *object = getThis();
char *dbname = NULL;
int dblen = 0;
@@ -126,10 +114,6 @@ PHP_FUNCTION(mysqli_embedded_connect)
return;
}
- if (MyG(profiler)){
- gettimeofday(&starttime, NULL);
- }
-
mysql = mysql_init(NULL);
if (mysql_real_connect(mysql, NULL, NULL, NULL, dbname, 0, NULL, 0) == NULL) {
@@ -142,14 +126,6 @@ PHP_FUNCTION(mysqli_embedded_connect)
php_mysqli_set_error(mysql_errno(mysql), (char *) mysql_error(mysql) TSRMLS_CC);
- if (MyG(profiler)) {
- prmysql = (PR_MYSQL *)MYSQLI_PROFILER_NEW(prmain, MYSQLI_PR_MYSQL, 0);
- php_mysqli_profiler_timediff(starttime, &prmysql->header.elapsedtime);
- MYSQLI_PROFILER_STARTTIME(prmysql);
- prmysql->hostname = prmysql->username = NULL;
- prmysql->thread_id = mysql->thread_id;
- }
-
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)mysql;
mysqli_resource->prinfo = prmysql;
@@ -215,12 +191,11 @@ PHP_FUNCTION(mysqli_multi_query)
zval *mysql_link;
char *query = NULL;
unsigned int query_len;
- PR_MYSQL *prmysql;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
MYSQLI_ENABLE_MQ;
if (mysql_real_query(mysql, query, query_len)) {
@@ -238,69 +213,42 @@ PHP_FUNCTION(mysqli_query)
zval *mysql_link;
MYSQLI_RESOURCE *mysqli_resource;
MYSQL_RES *result;
- PR_MYSQL *prmysql;
- PR_QUERY *prquery;
- PR_RESULT *prresult;
char *query = NULL;
unsigned int query_len;
unsigned int resultmode = 0;
- struct timeval starttime;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL*, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link");
-
- /* profiling information */
- if (MyG(profiler)) {
- prquery = (PR_QUERY *)MYSQLI_PROFILER_NEW(prmysql, MYSQLI_PR_QUERY, 1);
- prquery->explain.query = my_estrdup(query);
- if (!strncasecmp("select", query, 6)){
- if (!(MYSQLI_PROFILER_EXPLAIN(&prquery->explain, &prquery->header, mysql, query))) {
- RETURN_FALSE;
- }
- }
- }
+ MYSQLI_FETCH_RESOURCE(mysql, MYSQL*, &mysql_link, "mysqli_link");
MYSQLI_DISABLE_MQ;
if (mysql_real_query(mysql, query, query_len)) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql);
RETURN_FALSE;
}
- if (MyG(profiler)) {
- MYSQLI_PROFILER_ELAPSEDTIME(prquery);
- prquery->insertid = mysql_insert_id(mysql);
- prquery->affectedrows = mysql_affected_rows(mysql);
- }
if (!mysql_field_count(mysql)) {
+ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
+ php_mysqli_report_index(query, mysql->server_status);
+ }
RETURN_TRUE;
}
- /* profiler result information */
- if (MyG(profiler)) {
- gettimeofday(&starttime, NULL);
- prresult = (PR_RESULT *)MYSQLI_PROFILER_NEW(prquery, MYSQLI_PR_RESULT, 1);
- } else {
- prresult = NULL;
- }
-
result = (resultmode == MYSQLI_USE_RESULT) ? mysql_use_result(mysql) : mysql_store_result(mysql);
- if (result && MyG(profiler)) {
- MYSQLI_PROFILER_ELAPSEDTIME(prresult);
- prresult->rows = result->row_count;
- prresult->columns = result->field_count;
- }
-
if (!result) {
RETURN_FALSE;
}
+ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
+ php_mysqli_report_index(query, mysql->server_status);
+ }
+
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)result;
- mysqli_resource->prinfo = (void *)prresult;
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
}
/* }}} */
diff --git a/ext/mysqli/mysqli_report.c b/ext/mysqli/mysqli_report.c
new file mode 100644
index 0000000000..5e0b6d41dc
--- /dev/null
+++ b/ext/mysqli/mysqli_report.c
@@ -0,0 +1,83 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2003 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_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. |
+ +----------------------------------------------------------------------+
+ | Author: Georg Richter <georg@php.net> |
+ +----------------------------------------------------------------------+
+
+ $Id$
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "php_mysqli.h"
+
+/* {{{ bool mysqli_report(int flags)
+ sets report level */
+PHP_FUNCTION(mysqli_report)
+{
+ int flags;
+
+ if (MyG(report_mode)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Report level already set.");
+ RETURN_FALSE;
+ }
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &flags) == FAILURE) {
+ return;
+ }
+
+ if (!flags) {
+ RETURN_FALSE;
+ }
+ MyG(report_mode) = flags;
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ void php_mysqli_report_error(char *sqlstate, int errorno, char *error) */
+void php_mysqli_report_error(char *sqlstate, int errorno, char *error) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error (%s/%d): %s", sqlstate, errorno, error);
+}
+/* }}} */
+
+/* {{{ void php_mysqli_report_index() */
+void php_mysqli_report_index(char *query, unsigned int status) {
+ char index[15];
+
+ if (status & SERVER_QUERY_NO_GOOD_INDEX_USED) {
+ strcpy(index, "Bad index");
+ } else if (status & SERVER_QUERY_NO_INDEX_USED) {
+ strcpy(index, "No index");
+ } else {
+ return;
+ }
+
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s used in query %s", index, query);
+}
+/* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
diff --git a/ext/mysqli/mysqli_report.h b/ext/mysqli/mysqli_report.h
new file mode 100644
index 0000000000..3c54f66da9
--- /dev/null
+++ b/ext/mysqli/mysqli_report.h
@@ -0,0 +1,52 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2003 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_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. |
+ +----------------------------------------------------------------------+
+ | Author: Georg Richter <georg@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef __HAVE_MYSQLI_PROFILER_H__
+#define __HAVE_MYSQLI_PROFILER_H__
+
+#ifdef PHP_WIN32
+#include <process.h>
+#include <direct.h>
+#include "win32/time.h"
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/time.h>
+#endif
+
+typedef struct {
+ struct timeval starttime,
+ endtime; /* execution time */
+} PR_TIME_INFO;
+
+
+#define MYSQLI_PR_REPORT_STDERR 1
+#define MYSQLI_PR_REPORT_PORT 2
+
+
+
+/*** PROFILER MACROS ***/
+#define MYSQLI_PROFILER_STARTTIME(ptr) if (MyG(profiler.mode)) gettimeofday(&ptr.starttime, NULL)
+#define MYSQLI_PROFILER_ENDTIME(ptr) if (MyG(profiler.mode)) gettimeofday(&ptr.endtime, NULL)
+#define MYSQLI_PROFILER_REPORT(_type, _time, ptr) if (MyG(profiler.mode)) php_mysqli_profiler_report(_type, _time, (void *)ptr)
+
+
+
+#endif
diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h
index 2b35876723..5e77893f08 100644
--- a/ext/mysqli/php_mysqli.h
+++ b/ext/mysqli/php_mysqli.h
@@ -26,7 +26,6 @@
#endif
#include <mysql.h>
-#include "mysqli_profiler.h"
#ifndef PHP_MYSQLI_H
#define PHP_MYSQLI_H
@@ -52,7 +51,12 @@ typedef struct {
} STMT;
typedef struct {
- void *prinfo; /* profiler info */
+ int mode;
+ int socket;
+ FILE *fp;
+} PROFILER;
+
+typedef struct {
void *ptr; /* resource: (mysql, result, stmt) */
} MYSQLI_RESOURCE;
@@ -68,14 +72,12 @@ typedef struct _mysqli_property_entry {
int (*w_func)(mysqli_object *obj, zval **retval TSRMLS_DC);
} mysqli_property_entry;
-#define MYSQLI_PR_MAIN 0
-#define MYSQLI_PR_MYSQL 1
-#define MYSQLI_PR_QUERY 2
+#define MYSQLI_PR_CONNECT 1
+#define MYSQLI_PR_QUERY 2
#define MYSQLI_PR_QUERY_RESULT 3
-#define MYSQLI_PR_STMT 4
+#define MYSQLI_PR_STMT 4
#define MYSQLI_PR_STMT_RESULT 5
-#define MYSQLI_PR_RESULT 6
-#define MYSQLI_PR_COMMAND 7
+#define MYSQLI_PR_COMMAND 6
#define phpext_mysqli_ptr &mysqli_module_entry
@@ -104,6 +106,8 @@ extern mysqli_property_entry mysqli_stmt_property_entries[];
extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flag, int into_object);
extern void php_clear_stmt_bind(STMT *stmt);
extern void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type);
+extern void php_mysqli_report_error(char *sqlstate, int errorno, char *error);
+extern void php_mysqli_report_index(char *query, unsigned int status);
zend_class_entry *mysqli_link_class_entry;
zend_class_entry *mysqli_stmt_class_entry;
@@ -150,7 +154,7 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
MYSQLI_REGISTER_RESOURCE_EX(__ptr, object, __ce)\
}
-#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __prptr, __prtype, __id, __name) \
+#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name) \
{ \
MYSQLI_RESOURCE *my_res; \
mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
@@ -159,7 +163,6 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
RETURN_NULL();\
}\
__ptr = (__type)my_res->ptr; \
- __prptr = (__prtype)my_res->prinfo; \
if (!strcmp((char *)__name, "mysqli_stmt")) {\
if (!((STMT *)__ptr)->stmt->mysql) {\
php_error(E_WARNING, "Statement isn't valid anymore");\
@@ -195,6 +198,12 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
}\
}
+#if WIN32|WINNT
+#define SCLOSE(a) closesocket(a)
+#else
+#define SCLOSE(a) close(a)
+#endif
+
#define MYSQLI_STORE_RESULT 0
#define MYSQLI_USE_RESULT 1
@@ -213,6 +222,22 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML
#define FETCH_SIMPLE 1
#define FETCH_RESULT 2
+/*** REPORT MODES ***/
+#define MYSQLI_REPORT_INDEX 1
+#define MYSQLI_REPORT_ERROR 2
+#define MYSQLI_REPORT_CLOSE 4
+#define MYSQLI_REPORT_ALL 255
+
+#define MYSQLI_REPORT_MYSQL_ERROR(mysql) \
+if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql->net.last_errno) { \
+ php_mysqli_report_error(mysql->net.sqlstate, mysql->net.last_errno, mysql->net.last_error); \
+}
+
+#define MYSQLI_REPORT_STMT_ERROR(stmt) \
+if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && stmt->last_errno) { \
+ php_mysqli_report_error(stmt->sqlstate, stmt->last_errno, stmt->last_error); \
+}
+
PHP_MYSQLI_API void mysqli_register_link(zval *return_value, void *link TSRMLS_DC);
PHP_MYSQLI_API void mysqli_register_stmt(zval *return_value, void *stmt TSRMLS_DC);
PHP_MYSQLI_API void mysqli_register_result(zval *return_value, void *result TSRMLS_DC);
@@ -283,12 +308,11 @@ PHP_FUNCTION(mysqli_ping);
PHP_FUNCTION(mysqli_prepare);
PHP_FUNCTION(mysqli_query);
PHP_FUNCTION(mysqli_get_metadata);
-PHP_FUNCTION(mysqli_profiler);
+PHP_FUNCTION(mysqli_report);
PHP_FUNCTION(mysqli_read_query_result);
PHP_FUNCTION(mysqli_real_connect);
PHP_FUNCTION(mysqli_real_query);
PHP_FUNCTION(mysqli_real_escape_string);
-PHP_FUNCTION(mysqli_reload);
PHP_FUNCTION(mysqli_rollback);
PHP_FUNCTION(mysqli_row_seek);
PHP_FUNCTION(mysqli_rpl_parse_enabled);
@@ -334,7 +358,8 @@ ZEND_BEGIN_MODULE_GLOBALS(mysqli)
char *default_socket;
long error_no;
char *error_msg;
- unsigned int profiler;
+ int report_mode;
+ HashTable *report_ht;
unsigned int multi_query;
#ifdef HAVE_EMBEDDED_MYSQLI
unsigned int embedded;