两个方法,我给你思路:
1)
call_user_function_ex(EG(function_table), NULL, func, &t, 1, args, 0,NULL TSRMLS_CC);
2)
直接link libmysql或者mysqlnd,然后调用它的函数

解决方案 »

  1.   

    楼上的朋友,请问一下这个call_user_function_ex 是不是 扩展里面的函数,如果是,能不能解释一下参数的含义如果link libmysql
    编译命令要怎么写
    我现是用
    msdev myphpext\myphpext.dsp /MAKE "myphpext - Win32 Release_TS"
    在windows下
    但是我 #include <mysql.h>
    提示mysql.h找不到
      

  2.   

    call_user_function_ex是php提供的一个c api,具体的参数也没有一个官方的文档。我给你一个例子并稍微说明一下吧。zval *fname;
    zval **args[1];
    zval *retval;
    zval *arg1;
    args[0]=&arg1;
    int arg_count=1;
    call_user_function_ex(EG(function_table), NULL, fname, &retval, arg_count, args, 0,NULL TSRMLS_CC);
    fname就是函数名,retval就是返回值,arg_count就是传入的参数数目,args就是参数。第一个参数一般来说都是固定的,第二个参数除非是调用类方法,否则为NULL。call_user_function_ex的作用是在c层面呼叫php的函数。其实,既然你都能调用PHP的mysql函数了,那么libmysql肯定也是编译进去了,这时候直接用libmysql的函数即可。至于libmysql的用法么,我先问你,你以前写过调用第三方库的c程序吗?如果没写过,你应该先去了解一下如何在C程序里使用别人的库。mysql.h是MySQL(libmysql也在里面)附带的,你必须去mysql的官方站点下。#include <mysql.h> 的意思是说从$PATH里找这个h文件,你也可以以普通路径的形式调用,例如#include "../MySQL/mysql.h"你不应该来csdn问的,这里很少会有人回答你这种问题。
      

  3.   

    最后用vc 链接 libmysql 搞定了
    谢谢你 surfchen.
    只是有一点我不明白,为什么不能用原c的printf来打印,而非要用php_printf才可以呢
      

  4.   

    printf当然可以,不过只在测试时候用,因为printf只是输出到stdout。而php_printf,则是根据环境了选择输出方式。另外如果你发现printf不输出,可以试试fprintf(stderr,"xxx");。这个不会被缓冲。