Get number of affected rows in previous MySQL operation */
PHP_FUNCTION(mysqli_affected_rows)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
my_ulonglong rc;
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = mysql_affected_rows(mysql);
+ rc = mysql_affected_rows(mysql->mysql);
MYSQLI_RETURN_LONG_LONG(rc);
}
/* }}} */
Turn auto commit on or of */
PHP_FUNCTION(mysqli_autocommit)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = (long) mysql_autocommit(mysql, automode);
+ rc = (long) mysql_autocommit(mysql->mysql, automode);
RETURN_BOOL(rc);
}
int num_vars;
int start = 2;
int ofs;
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
MYSQL_BIND *bind;
char *types;
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
if (getThis()) {
start = 1;
}
ofs++;
}
-#ifndef HAVE_MYSQLI_OLDAPI
rc = mysql_stmt_bind_param(stmt->stmt, bind);
-#else
- rc = mysql_bind_param(stmt->stmt, bind);
-#endif
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
if (rc) {
int ofs;
long col_type;
ulong rc;
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
MYSQL_BIND *bind;
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
var_cnt = argc - start;
Change logged-in user of the active connection */
PHP_FUNCTION(mysqli_change_user)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
char *user, *password, *dbname;
int user_len, password_len, dbname_len;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = mysql_change_user(mysql, user, password, dbname);
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ rc = mysql_change_user(mysql->mysql, user, password, dbname);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
if (rc) {
RETURN_FALSE;
Returns the name of the character set used for this connection */
PHP_FUNCTION(mysqli_character_set_name)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
char *charsetname;
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- charsetname = (char *)mysql_character_set_name(mysql);
+ charsetname = (char *)mysql_character_set_name(mysql->mysql);
RETURN_STRING(charsetname, 1);
}
PHP_FUNCTION(mysqli_close)
{
zval *mysql_link;
- MYSQL *mysql;
+ MY_MYSQL *mysql;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- mysql_close(mysql);
+ mysql_close(mysql->mysql);
MYSQLI_CLEAR_RESOURCE(&mysql_link);
RETURN_TRUE;
Commit outstanding actions and close transaction */
PHP_FUNCTION(mysqli_commit)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
- rc = mysql_commit(mysql);
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+ rc = mysql_commit(mysql->mysql);
RETURN_BOOL(rc);
}
/* }}} */
*/
PHP_FUNCTION(mysqli_dump_debug_info)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = mysql_dump_debug_info(mysql);
+ rc = mysql_dump_debug_info(mysql->mysql);
if (rc) {
RETURN_FALSE;
Returns the numerical value of the error message from previous MySQL operation */
PHP_FUNCTION(mysqli_errno)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_errno(mysql));
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+ RETURN_LONG(mysql_errno(mysql->mysql));
}
/* }}} */
Returns the text of the error message from previous MySQL operation */
PHP_FUNCTION(mysqli_error)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
- RETURN_STRING((char *)mysql_error(mysql),1);
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+ RETURN_STRING((char *)mysql_error(mysql->mysql),1);
}
/* }}} */
Execute a prepared statement */
PHP_FUNCTION(mysqli_stmt_execute)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
unsigned int i;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
for (i = 0; i < stmt->param.var_cnt; i++) {
if (stmt->param.vars[i]) {
Fetch results from a prepared statement into the bound variables */
PHP_FUNCTION(mysqli_stmt_fetch)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
unsigned int i;
ulong ret;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
/* reset buffers */
*/
PHP_FUNCTION(mysqli_field_count)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_field_count(mysql));
+ RETURN_LONG(mysql_field_count(mysql->mysql));
}
/* }}} */
Get MySQL host info */
PHP_FUNCTION(mysqli_get_host_info)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_STRING((mysql->host_info) ? mysql->host_info : empty_string, 1);
+ RETURN_STRING((mysql->mysql->host_info) ? mysql->mysql->host_info : empty_string, 1);
}
/* }}} */
Get MySQL protocol information */
PHP_FUNCTION(mysqli_get_proto_info)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_get_proto_info(mysql));
+ RETURN_LONG(mysql_get_proto_info(mysql->mysql));
}
/* }}} */
Get MySQL server info */
PHP_FUNCTION(mysqli_get_server_info)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_STRING((char *)mysql_get_server_info(mysql), 1);
+ RETURN_STRING((char *)mysql_get_server_info(mysql->mysql), 1);
}
/* }}} */
Return the MySQL version for the server referenced by the given link */
PHP_FUNCTION(mysqli_get_server_version)
{
- MYSQL *mysql;
- zval *mysql_link = NULL;
+ MY_MYSQL *mysql;
+ zval *mysql_link = NULL;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_get_server_version(mysql));
+ RETURN_LONG(mysql_get_server_version(mysql->mysql));
}
-
/* }}} */
/* {{{ proto string mysqli_info(object link)
Get information about the most recent query */
PHP_FUNCTION(mysqli_info)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_STRING((mysql->info) ? mysql->info : empty_string, 1);
+ RETURN_STRING((mysql->mysql->info) ? mysql->mysql->info : empty_string, 1);
}
/* }}} */
Initialize mysqli and return a resource for use with mysql_real_connect */
PHP_FUNCTION(mysqli_init)
{
+ MY_MYSQL *mysql = (MY_MYSQL *)calloc(1, sizeof(MY_MYSQL));
+
MYSQLI_RESOURCE *mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)mysql_init(NULL);
+
+ if (!(mysql->mysql = mysql_init(NULL))) {
+ efree(mysql);
+ RETURN_FALSE;
+ }
+ mysqli_resource->ptr = (void *)mysql;
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
}
/* }}} */
Get the ID generated from the previous INSERT operation */
PHP_FUNCTION(mysqli_insert_id)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
my_ulonglong rc;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
- rc = mysql_insert_id(mysql);
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+ rc = mysql_insert_id(mysql->mysql);
MYSQLI_RETURN_LONG_LONG(rc)
}
/* }}} */
Kill a mysql process on the server */
PHP_FUNCTION(mysqli_kill)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
int processid;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if (mysql_kill(mysql, processid)) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ if (mysql_kill(mysql->mysql, processid)) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
RETURN_TRUE;
}
/* }}} */
+#ifndef PHP_WIN32
+/* {{{ proto mysqli_set_local_infile_default(object link)
+ unsets user defined handler for load local infile command */
+PHP_FUNCTION(mysqli_set_local_infile_default)
+{
+ MY_MYSQL *mysql;
+ zval *mysql_link;
+ int i;
+
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
+ return;
+ }
+
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+
+ for (i=0; i < 3; i++) {
+ if (&mysql->callback_func[i]) {
+ zval_dtor(&mysql->callback_func[i]);
+ }
+ }
+
+ mysql_set_local_infile_default(mysql->mysql);
+}
+/* }}} */
+
+/* {{{ proto bool mysqli_set_local_infile_handler(object link, callback init_func,
+ callback read_func, callback end_func)
+ Set callback functions for LOAD DATA LOCAL INFILE */
+PHP_FUNCTION(mysqli_set_local_infile_handler)
+{
+ MY_MYSQL *mysql;
+ zval *mysql_link;
+ char *callback_name;
+ zval *callback_func[4];
+ int i;
+
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ozzzz", &mysql_link, mysqli_link_class_entry,
+ &callback_func[0], &callback_func[1], &callback_func[2], &callback_func[3]) == FAILURE) {
+ return;
+ }
+
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+
+ /* check callback functions */
+ for (i=0; i < 3; i++) {
+ if (!zend_is_callable(callback_func[i], 0, &callback_name)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback function %s", callback_name);
+ efree(callback_name);
+ RETURN_FALSE;
+ }
+ efree(callback_name);
+ }
+
+ /* save callback functions */
+ for (i=0; i < 3; i++) {
+ ZVAL_STRING(&mysql->callback_func[i], callback_func[i]->value.str.val, 1);
+ }
+
+ /* register internal callback functions */
+ mysql_set_local_infile_handler(mysql->mysql, &php_local_infile_init, &php_local_infile_read,
+ &php_local_infile_end, &php_local_infile_error, (void *)mysql);
+}
+/* }}} */
+#endif
+
/* {{{ proto bool mysqli_more_results(object link)
check if there any more query results from a multi query */
PHP_FUNCTION(mysqli_more_results) {
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if (!mysql_more_results(mysql)) {
+ if (!mysql_more_results(mysql->mysql)) {
RETURN_FALSE;
}
RETURN_TRUE;
/* {{{ proto bool mysqli_next_result(object link)
read next result from multi_query */
PHP_FUNCTION(mysqli_next_result) {
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if (mysql_next_result(mysql)) {
+ if (mysql_next_result(mysql->mysql)) {
RETURN_FALSE;
}
RETURN_TRUE;
Set options */
PHP_FUNCTION(mysqli_options)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
zval *mysql_value;
long mysql_option;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
switch (Z_TYPE_PP(&mysql_value)) {
case IS_STRING:
- ret = mysql_options(mysql, mysql_option, Z_STRVAL_PP(&mysql_value));
+ ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(&mysql_value));
break;
default:
convert_to_long_ex(&mysql_value);
l_value = Z_LVAL_PP(&mysql_value);
- ret = mysql_options(mysql, mysql_option, (char *)&l_value);
+ ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);
break;
}
Return the number of parameter for the given statement */
PHP_FUNCTION(mysqli_stmt_param_count)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
#ifndef HAVE_MYSQLI_OLDAPI
RETURN_LONG(mysql_stmt_param_count(stmt->stmt));
Ping a server connection or reconnect if there is no connection */
PHP_FUNCTION(mysqli_ping)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
- rc = mysql_ping(mysql);
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+ rc = mysql_ping(mysql->mysql);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
if (rc) {
RETURN_FALSE;
}
Prepare a SQL statement for execution */
PHP_FUNCTION(mysqli_prepare)
{
- MYSQL *mysql;
- STMT *stmt;
+ MY_MYSQL *mysql;
+ MY_STMT *stmt;
char *query = NULL;
unsigned int query_len;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- stmt = (STMT *)ecalloc(1,sizeof(STMT));
+ stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
-#ifdef HAVE_MYSQLI_OLDAPI
- stmt->stmt = mysql_prepare(mysql, query, query_len);
-#else
- if ((stmt->stmt = mysql_stmt_init(mysql))) {
+ if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) {
if (mysql_stmt_prepare(stmt->stmt, query, query_len)) {
mysql_stmt_close(stmt->stmt);
stmt->stmt = NULL;
}
}
-#endif
+
if (!stmt->stmt) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
efree(stmt);
RETURN_FALSE;
}
Open a connection to a mysql server */
PHP_FUNCTION(mysqli_real_connect)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
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, flags=0;
}
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
/* remove some insecure options */
flags ^= CLIENT_MULTI_STATEMENTS; /* don't allow multi_queries via connect parameter */
flags ^= CLIENT_LOCAL_FILES;
}
- if (mysql_real_connect(mysql,hostname,username,passwd,dbname,port,socket,flags) == NULL) {
+ if (mysql_real_connect(mysql->mysql,hostname,username,passwd,dbname,port,socket,flags) == NULL) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
- php_mysqli_set_error(mysql_errno(mysql), (char *) mysql_error(mysql) TSRMLS_CC);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
+ php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql->mysql));
}
RETURN_FALSE;
}
- php_mysqli_set_error(mysql_errno(mysql), (char *)mysql_error(mysql) TSRMLS_CC);
+ php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)mysql_error(mysql->mysql) TSRMLS_CC);
- mysql->reconnect = MyG(reconnect);
+ mysql->mysql->reconnect = MyG(reconnect);
if (object) {
((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->valid = 1;
Binary-safe version of mysql_query() */
PHP_FUNCTION(mysqli_real_query)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
char *query = NULL;
unsigned int query_len;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
MYSQLI_DISABLE_MQ; /* disable multi statements/queries */
- if (mysql_real_query(mysql, query, query_len)) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ if (mysql_real_query(mysql->mysql, query, query_len)) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
- if (!mysql_field_count(mysql)) {
+ if (!mysql_field_count(mysql->mysql)) {
if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index(query, mysql->server_status TSRMLS_CC);
+ php_mysqli_report_index(query, mysql->mysql->server_status TSRMLS_CC);
}
}
/* {{{ proto string mysqli_real_escape_string(object link, string escapestr)
Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection */
PHP_FUNCTION(mysqli_real_escape_string) {
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link = NULL;
char *escapestr, *newstr;
int escapestr_len, newstr_len;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
newstr = safe_emalloc(2, escapestr_len, 1);
- newstr_len = mysql_real_escape_string(mysql, newstr, escapestr, escapestr_len);
+ newstr_len = mysql_real_escape_string(mysql->mysql, newstr, escapestr, escapestr_len);
newstr = erealloc(newstr, newstr_len + 1);
RETURN_STRING(newstr, 0);
Undo actions from current transaction */
PHP_FUNCTION(mysqli_rollback)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_BOOL(mysql_rollback(mysql));
+ RETURN_BOOL(mysql_rollback(mysql->mysql));
}
/* }}} */
*/
PHP_FUNCTION(mysqli_stmt_send_long_data)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
- char *data;
- long param_nr, data_len;
+ char *data;
+ long param_nr, data_len;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols", &mysql_stmt, mysqli_stmt_class_entry, ¶m_nr, &data, &data_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
if (param_nr < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number");
Return the number of rows affected in the last query for the given link */
PHP_FUNCTION(mysqli_stmt_affected_rows)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
my_ulonglong rc;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
rc = mysql_stmt_affected_rows(stmt->stmt);
MYSQLI_RETURN_LONG_LONG(rc)
Close statement */
PHP_FUNCTION(mysqli_stmt_close)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
mysql_stmt_close(stmt->stmt);
stmt->stmt = NULL;
php_clear_stmt_bind(stmt);
Move internal result pointer */
PHP_FUNCTION(mysqli_stmt_data_seek)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
long offset;
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
mysql_stmt_data_seek(stmt->stmt, offset);
return;
Free stored result memory for the given statement handle */
PHP_FUNCTION(mysqli_stmt_free_result)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
mysql_stmt_free_result(stmt->stmt);
}
/* }}} */
+/* {{{ proto mixed mysqli_stmt_insert_id(object stmt)
+ Get the ID generated from the previous INSERT operation */
+PHP_FUNCTION(mysqli_stmt_insert_id)
+{
+ MY_STMT *stmt;
+ my_ulonglong rc;
+ zval *mysql_stmt;
+
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
+ return;
+ }
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
+ rc = mysql_stmt_insert_id(stmt->stmt);
+ MYSQLI_RETURN_LONG_LONG(rc)
+}
+/* }}} */
+
/* {{{ proto void mysqli_stmt_reset(object stmt)
reset a prepared statement */
PHP_FUNCTION(mysqli_stmt_reset)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
mysql_stmt_reset(stmt->stmt);
Return the number of rows in statements result set */
PHP_FUNCTION(mysqli_stmt_num_rows)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
my_ulonglong rc;
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
rc = mysql_stmt_num_rows(stmt->stmt);
MYSQLI_RETURN_LONG_LONG(rc)
Select a MySQL database */
PHP_FUNCTION(mysqli_select_db)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
char *dbname;
int dbname_len;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if (!mysql_select_db(mysql, dbname)) {
+ if (!mysql_select_db(mysql->mysql, dbname)) {
RETURN_TRUE;
}
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
/* }}} */
#if MYSQL_VERSION_ID >= 40101
PHP_FUNCTION(mysqli_sqlstate)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
- RETURN_STRING((char *)mysql_sqlstate(mysql),1);
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+ RETURN_STRING((char *)mysql_sqlstate(mysql->mysql),1);
}
#endif
/* }}} */
*/
PHP_FUNCTION(mysqli_ssl_set)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
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;
+ char *ssl_parm[5];
+ int ssl_parm_len[5], i;
- 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) {
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osssss", &mysql_link, mysqli_link_class_entry, &ssl_parm[0], &ssl_parm_len[0], &ssl_parm[1], &ssl_parm_len[1], &ssl_parm[2], &ssl_parm_len[2], &ssl_parm[3], &ssl_parm_len[3], &ssl_parm[4], &ssl_parm_len[4]) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- mysql_ssl_set(mysql, key, cert, ca, capath, cipher);
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
+
+ for (i=0; i < 5; i++) {
+ if (!ssl_parm_len[i]) {
+ ssl_parm[i] = NULL;
+ }
+ }
+
+ mysql_ssl_set(mysql->mysql, ssl_parm[0], ssl_parm[1], ssl_parm[2], ssl_parm[3], ssl_parm[4]);
RETURN_TRUE;
}
Get current system status */
PHP_FUNCTION(mysqli_stat)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
char *stat;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if ((stat = (char *)mysql_stat(mysql))) {
+ if ((stat = (char *)mysql_stat(mysql->mysql))) {
RETURN_STRING(stat, 1);
}
RETURN_FALSE;
*/
PHP_FUNCTION(mysqli_stmt_errno)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_LONG(mysql_stmt_errno(stmt->stmt));
}
*/
PHP_FUNCTION(mysqli_stmt_error)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_STRING((char *)mysql_stmt_error(stmt->stmt),1);
}
/* }}} */
-#ifndef HAVE_MYSQLI_OLDAPI
/* {{{ proto object mysqli_stmt_init(object link)
Initialize statement object
*/
PHP_FUNCTION(mysqli_stmt_init)
{
MYSQL *mysql;
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_link;
MYSQLI_RESOURCE *mysqli_resource;
}
MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- stmt = (STMT *)ecalloc(1,sizeof(STMT));
+ stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
if (!(stmt->stmt = mysql_stmt_init(mysql))) {
efree(stmt);
*/
PHP_FUNCTION(mysqli_stmt_prepare)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
char *query;
int query_len;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &query, &query_len) == FAILURE) {
return;
}
- MYSQLI_FETCH_RESOURCE(stmt, STMT *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
if (mysql_stmt_prepare(stmt->stmt, query, query_len)) {
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
RETURN_TRUE;
}
/* }}} */
-#endif
/* {{{ proto mixed mysqli_stmt_result_metadata(object stmt)
return result set from statement */
PHP_FUNCTION(mysqli_stmt_result_metadata)
{
- STMT *stmt;
+ MY_STMT *stmt;
MYSQL_RES *result;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
#ifndef HAVE_MYSQLI_OLDAPI
if (!(result = mysql_stmt_result_metadata(stmt->stmt))){
*/
PHP_FUNCTION(mysqli_stmt_store_result)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
if (mysql_stmt_store_result(stmt->stmt)){
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
/* {{{ proto string mysqli_stmt_sqlstate(object stmt)
*/
-#if MYSQL_VERSION_ID >= 40101
PHP_FUNCTION(mysqli_stmt_sqlstate)
{
- STMT *stmt;
+ MY_STMT *stmt;
zval *mysql_stmt;
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 *, &mysql_stmt, "mysqli_stmt");
+ MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
RETURN_STRING((char *)mysql_stmt_sqlstate(stmt->stmt),1);
}
-#endif
/* }}} */
/* {{{ proto object mysqli_store_result(object link)
Buffer result set on client */
PHP_FUNCTION(mysqli_store_result)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
MYSQL_RES *result;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if (!(result = mysql_store_result(mysql))) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ if (!(result = mysql_store_result(mysql->mysql))) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index("from previous query", mysql->server_status TSRMLS_CC);
+ php_mysqli_report_index("from previous query", mysql->mysql->server_status TSRMLS_CC);
}
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)result;
Return the current thread ID */
PHP_FUNCTION(mysqli_thread_id)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_thread_id(mysql));
+ RETURN_LONG(mysql_thread_id(mysql->mysql));
}
/* }}} */
Directly retrieve query results - do not buffer results on client side */
PHP_FUNCTION(mysqli_use_result)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
MYSQL_RES *result;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- if (!(result = mysql_use_result(mysql))) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql);
+ if (!(result = mysql_use_result(mysql->mysql))) {
+ MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index("from previous query", mysql->server_status TSRMLS_CC);
+ php_mysqli_report_index("from previous query", mysql->mysql->server_status TSRMLS_CC);
}
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
Return number of warnings from the last query for the given link */
PHP_FUNCTION(mysqli_warning_count)
{
- MYSQL *mysql;
+ MY_MYSQL *mysql;
zval *mysql_link;
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 *, &mysql_link, "mysqli_link");
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_warning_count(mysql));
+ RETURN_LONG(mysql_warning_count(mysql->mysql));
}
/* }}} */
#include "ext/standard/info.h"
#include "php_mysqli.h"
-#define MYSQLI_MAP_PROPERTY_LONG( __func, __type, __val)\
-int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \
-{\
- __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; \
- ALLOC_ZVAL(*retval);\
- if (!p) {\
- ZVAL_NULL(*retval);\
- } else {\
- ZVAL_LONG(*retval, (long)p->__val);\
- }\
- return SUCCESS;\
-}
+#define MYSQLI_GET_MYSQL() \
+MYSQL *p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql;
+
+#define MYSQLI_GET_RESULT() \
+MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr
-#define MYSQLI_MAP_PROPERTY_LONG_LONG( __func, __type, __val)\
+#define MYSQLI_GET_STMT() \
+MYSQL_STMT *p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt
+
+#define MYSQLI_MAP_PROPERTY_FUNC_LONG( __func, __int_func, __get_type, __ret_type)\
int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \
{\
- __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; \
+ __ret_type l;\
+ __get_type;\
ALLOC_ZVAL(*retval);\
if (!p) {\
ZVAL_NULL(*retval);\
} else {\
- if (p->__val < LONG_MAX) { \
- ZVAL_LONG(*retval, (long)p->__val); \
+ l = (__ret_type)__int_func(p);\
+ if (l < LONG_MAX) {\
+ ZVAL_LONG(*retval, l);\
} else { \
char ret[40]; \
- sprintf(ret, "%llu", p->__val); \
+ sprintf(ret, "%llu", (my_ulonglong)l); \
ZVAL_STRING(*retval, ret, 1); \
} \
}\
return SUCCESS;\
}
-#define MYSQLI_MAP_PROPERTY_STRING( __func, __type, __val)\
+#define MYSQLI_MAP_PROPERTY_FUNC_STRING(__func, __int_func, __get_type)\
int __func(mysqli_object *obj, zval **retval TSRMLS_DC)\
{\
- __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;\
+ char *c;\
+ __get_type;\
ALLOC_ZVAL(*retval);\
if (!p) {\
ZVAL_NULL(*retval);\
} else {\
- if (!p->__val) {\
+ c = (char *)__int_func(p);\
+ if (!c) {\
ZVAL_NULL(*retval);\
} else {\
- ZVAL_STRING(*retval, p->__val, 1);\
+ ZVAL_STRING(*retval, c, 1);\
}\
}\
return SUCCESS;\
}
/* }}} */
-/* {{{ property link_server_version_read */
-int link_server_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- MYSQL *mysql = (MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
- ALLOC_ZVAL(*retval);
- ZVAL_LONG(*retval, mysql_get_server_version(mysql));
- return SUCCESS;
-}
-/* }}} */
-
/* {{{ property link_connect_error_read */
int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
}
/* }}} */
-/* link properties */
-MYSQLI_MAP_PROPERTY_LONG_LONG(link_affected_rows_read, MYSQL, last_used_con->affected_rows);
-MYSQLI_MAP_PROPERTY_LONG(link_client_flags_read, MYSQL, client_flag);
-MYSQLI_MAP_PROPERTY_LONG(link_errno_read, MYSQL, net.last_errno);
-MYSQLI_MAP_PROPERTY_STRING(link_error_read, MYSQL, net.last_error);
-MYSQLI_MAP_PROPERTY_LONG(link_field_count_read, MYSQL, field_count);
-MYSQLI_MAP_PROPERTY_STRING(link_host_read, MYSQL, host);
-MYSQLI_MAP_PROPERTY_STRING(link_host_info_read, MYSQL, host_info);
-MYSQLI_MAP_PROPERTY_STRING(link_info_read, MYSQL, info);
-MYSQLI_MAP_PROPERTY_LONG_LONG(link_insert_id_read, MYSQL, last_used_con->insert_id);
-MYSQLI_MAP_PROPERTY_LONG(link_port_read, MYSQL, port);
-MYSQLI_MAP_PROPERTY_LONG(link_protocol_version_read, MYSQL, protocol_version);
-MYSQLI_MAP_PROPERTY_LONG(link_server_capabilities_read, MYSQL, server_capabilities);
-MYSQLI_MAP_PROPERTY_LONG(link_server_language_read, MYSQL, server_language);
-MYSQLI_MAP_PROPERTY_LONG(link_server_status_read, MYSQL, server_status);
-MYSQLI_MAP_PROPERTY_STRING(link_server_info_read, MYSQL, server_version);
-MYSQLI_MAP_PROPERTY_STRING(link_sqlstate_read, MYSQL, net.sqlstate);
-MYSQLI_MAP_PROPERTY_LONG(link_thread_id_read, MYSQL, thread_id);
-MYSQLI_MAP_PROPERTY_STRING(link_user_read, MYSQL, user);
-MYSQLI_MAP_PROPERTY_LONG(link_warning_count_read, MYSQL, warning_count);
+/* link properties */
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_affected_rows_read, mysql_affected_rows, MYSQLI_GET_MYSQL(), my_ulonglong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_errno_read, mysql_errno, MYSQLI_GET_MYSQL(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_STRING(link_error_read, mysql_error, MYSQLI_GET_MYSQL());
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_field_count_read, mysql_field_count, MYSQLI_GET_MYSQL(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_STRING(link_host_info_read, mysql_get_host_info, MYSQLI_GET_MYSQL());
+MYSQLI_MAP_PROPERTY_FUNC_STRING(link_info_read, mysql_info, MYSQLI_GET_MYSQL());
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_insert_id_read, mysql_insert_id, MYSQLI_GET_MYSQL(), my_ulonglong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_protocol_version_read, mysql_get_proto_info, MYSQLI_GET_MYSQL(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_STRING(link_server_info_read, mysql_get_server_info, MYSQLI_GET_MYSQL());
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_server_version_read, mysql_get_server_version, MYSQLI_GET_MYSQL(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_STRING(link_sqlstate_read, mysql_sqlstate, MYSQLI_GET_MYSQL());
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_thread_id_read, mysql_thread_id, MYSQLI_GET_MYSQL(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(link_warning_count_read, mysql_warning_count, MYSQLI_GET_MYSQL(), ulong);
/* result properties */
/* {{{ property result_type_read */
}
/* }}} */
-MYSQLI_MAP_PROPERTY_LONG(result_current_field_read, MYSQL_RES, current_field);
-MYSQLI_MAP_PROPERTY_LONG(result_field_count_read, MYSQL_RES, field_count);
-MYSQLI_MAP_PROPERTY_LONG_LONG(result_num_rows_read, MYSQL_RES, row_count);
-/* statement properties */
+MYSQLI_MAP_PROPERTY_FUNC_LONG(result_current_field_read, mysql_field_tell, MYSQLI_GET_RESULT(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(result_field_count_read, mysql_num_fields, MYSQLI_GET_RESULT(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(result_num_rows_read, mysql_num_rows, MYSQLI_GET_RESULT(), my_ulonglong);
-#if MYSQL_VERSION_ID < 40102
-MYSQLI_MAP_PROPERTY_LONG_LONG(stmt_affected_rows_read, STMT, stmt->mysql->last_used_con->affected_rows);
-#else
-MYSQLI_MAP_PROPERTY_LONG_LONG(stmt_affected_rows_read, STMT, stmt->affected_rows);
-#endif
-MYSQLI_MAP_PROPERTY_LONG_LONG(stmt_num_rows_read, STMT, stmt->result->row_count);
-MYSQLI_MAP_PROPERTY_LONG(stmt_param_count_read, STMT, stmt->param_count);
-MYSQLI_MAP_PROPERTY_LONG(stmt_field_count_read, STMT, stmt->field_count);
-MYSQLI_MAP_PROPERTY_LONG(stmt_id_read, STMT, stmt->stmt_id);
-MYSQLI_MAP_PROPERTY_LONG(stmt_errno_read, STMT, stmt->last_errno);
-MYSQLI_MAP_PROPERTY_STRING(stmt_error_read, STMT, stmt->last_error);
-MYSQLI_MAP_PROPERTY_STRING(stmt_sqlstate_read, STMT, stmt->sqlstate);
+/* statement properties */
+MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_affected_rows_read, mysql_stmt_affected_rows, MYSQLI_GET_STMT(), my_ulonglong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_insert_id_read, mysql_stmt_insert_id, MYSQLI_GET_STMT(), my_ulonglong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_num_rows_read, mysql_stmt_num_rows, MYSQLI_GET_STMT(), my_ulonglong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_param_count_read, mysql_stmt_param_count, MYSQLI_GET_STMT(), ulong);
+//MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_field_count_read, mysql_stmt_field_count, MYSQLI_GET_STMT(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_errno_read, mysql_stmt_errno, MYSQLI_GET_STMT(), ulong);
+MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_error_read, mysql_stmt_error, MYSQLI_GET_STMT());
+MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_sqlstate_read, mysql_stmt_sqlstate, MYSQLI_GET_STMT());
mysqli_property_entry mysqli_link_property_entries[] = {
{"affected_rows", link_affected_rows_read, NULL},
- {"client_flags", link_client_flags_read, NULL},
{"client_version", link_client_version_read, NULL},
{"connect_errno", link_connect_errno_read, NULL},
{"connect_error", link_connect_error_read, NULL},
{"errno", link_errno_read, NULL},
{"error", link_error_read, NULL},
{"field_count", link_field_count_read, NULL},
- {"host", link_host_read, NULL},
{"host_info", link_host_info_read, NULL},
{"info", link_info_read, NULL},
{"insert_id", link_insert_id_read, NULL},
- {"server_capabilities", link_server_capabilities_read, NULL},
- {"server_status", link_server_status_read, NULL},
{"server_info", link_server_info_read, NULL},
{"server_version", link_server_version_read, NULL},
{"sqlstate", link_sqlstate_read, NULL},
- {"port", link_port_read, NULL},
{"protocol_version", link_protocol_version_read, NULL},
- {"server_language", link_protocol_version_read, NULL},
{"thread_id", link_thread_id_read, NULL},
- {"user", link_user_read, NULL},
{"warning_count", link_warning_count_read, NULL},
{NULL, NULL, NULL}
};
mysqli_property_entry mysqli_stmt_property_entries[] = {
{"affected_rows", stmt_affected_rows_read, NULL},
+ {"insert_id", stmt_insert_id_read, NULL},
{"num_rows", stmt_num_rows_read, NULL},
{"param_count", stmt_param_count_read, NULL},
+
+/* TODO: stmt->field_count doesn't work currently, remove comments until mysqli_stmt_field_count
+ is implemented in client library
{"field_count", stmt_field_count_read, NULL},
- {"id", stmt_id_read, NULL},
+*/
+
{"errno", stmt_errno_read, NULL},
{"error", stmt_error_read, NULL},
{"sqlstate", stmt_sqlstate_read, NULL},