【发布时间】:2012-11-19 13:41:24
【问题描述】:
我编写了一个代码来构建一个通过mysql_connect连接到mysql数据库的扩展。
我的代码已编译,但是当我想在 PHP 中使用我的函数时,它需要一个循环并且可能无法工作。 这是我的 C++ 代码:
PHP_FUNCTION(ig_connect_to_database)
{
zval fname, *args[3], *retval = NULL;
ZVAL_STRING(&fname, "mysql_connect", 0);
MAKE_STD_ZVAL(args[0]);
ZVAL_STRING(args[0], "localhost", 1);
MAKE_STD_ZVAL(args[1]);
ZVAL_STRING(args[1], "root", 1);
MAKE_STD_ZVAL(args[2]);
ZVAL_STRING(args[2], "", 1);
if (call_user_function(EG(function_table), NULL, &fname, retval, 3, args TSRMLS_CC) == SUCCESS) {
zval_ptr_dtor(&retval);
zval_ptr_dtor(&args[1]);
zval_ptr_dtor(&args[0]);
}
}
任何人都可以帮助我吗?
我只想返回我的资源连接。
我知道“retval”是我的资源,但我不知道如何将这个资源返回到我的 php 代码中。
【问题讨论】:
-
我认为 retval 不能为 NULL。如果您使用 call_user_function_ex() 代替,则可能是这样,因为该函数将 zval ** 作为返回值。
-
我只是用define retval解决了这个问题:zval retval。我有一个问题要返回我的资源连接。 c ++编译器告诉我'zif_ig_connect_to_database':'void'函数返回一个值。如何归还我的资源?
标签: php c php-internals