免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: maya1982
打印 上一主题 下一主题

编写过PHP模块的朋友请进来指导一下! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-03-07 13:28 |只看该作者
这里是我这几天来研究PHP扩展的一些体会,和解决掉的错误


  1. PHP_FUNCTION(passport_register){

  2.         // 和之前的代码比较,我没有为*connection分配内存,显然,内存是由Zend进行管理的。必须用Zend的内存管理函数来分配和回收内存资源。
  3.         MYSQL *connection = (MYSQL*)emalloc(sizeof(MYSQL));
  4.         MYSQL_RES *resultset = (MYSQL_RES*)emalloc(sizeof(MYSQL_RES));
  5. //        MYSQL_ROW row = (MYSQL_ROW)emalloc(sizeof(MYSQL_ROW));
  6. //        MYSQL_FIELD *fields = (MYSQL_FIELD*)emalloc(sizeof(MYSQL_FIELD));

  7.         unsigned int numrows, numcols, i;
  8.         mysql_init(connection);       
  9.         if(connection == NULL){
  10.         RETURN_FALSE;
  11.         }
  12.         if (mysql_real_connect(connection,"localhost","develop","********","passport",3306,NULL,0) == NULL){
  13.         RETURN_FALSE;
  14.         }
  15.         zval *rconn;
  16.         MAKE_STD_ZVAL(rconn);

  17.         // 要注册资源类型。之前却没有注册。
  18.         ZEND_REGISTER_RESOURCE(rconn, connection, le_sample_connection);
  19.         array_init(return_value);
  20.         add_index_zval(return_value, 0, rconn);
  21.        
  22.         char query[] = "SELECT username,usertypeid,email,status,ipaddr_registered FROM passport";
  23.         // 要在此使用资源数据类型,要从Zend内部的HashTable 中取回资源。
  24.         ZEND_FETCH_RESOURCE(connection, MYSQL*, &rconn, -1, "mysql connection", le_sample_connection);
  25.        
  26.         if (mysql_query(connection, query) != 0)
  27.         {
  28.                 RETURN_FALSE;
  29.         }
  30.         resultset = mysql_use_result(connection);
  31.         if (resultset == NULL){
  32.                 RETURN_FALSE;
  33.         }
  34.         zval *rresult;
  35.         MAKE_STD_ZVAL(rresult);
  36.         ZEND_REGISTER_RESOURCE(rresult, resultset, le_sample_result);
  37.         add_index_zval(return_value, 2, rresult);
  38.        
  39. }

复制代码


php 测试代码:

  1. $passport = passport_register();
  2. var_dump($passport);
复制代码


输出结果:

  1. array(2) {
  2.   [0]=>
  3.   resource(3) of type (mysql connection)
  4.   [2]=>
  5.   resource(4) of type (mysql result)
  6. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2007-03-07 13:44 |只看该作者
Congratulations
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP