我写了个扩展

#1 dft2000

但是发现 在扩展中使用spModel时,对于非delete  replace into 语句  出现问题,
用query函数查询  结果却返回false  并且sql的却没有被执行  但是 mysql_error却返回空值,
这个很奇怪  
有谁知道怎么回事的么?
下面是错误值
我该用直接mysql连接则不会有这个问题

REPLACE INTO `hotlinetask`.`sessions` (sessionid, data, lastvisit) VALUES('20t9gpq388r94pque8t1dpllu5', 'a|s:5:\"vvvvv\";', '1285572862')
执行错误:

    * D:\Apache2\htdocs\test\SpeedPHP\Core\mysql.php on line 61

56.      {
57.          $this->arrSql[] = $sql;
58.          if( $result = mysql_query($sql, $this->conn) ){
59.              return $result;
60.          }else{
61.              spError("{$sql}
执行错误: " . mysql_error());
62.          }
63.      }
64.
65.      /**
66.       * 获取数据表结构

    * D:\Apache2\htdocs\test\SpeedPHP\Core\spModel.php on line 214

209.       *
210.       * @param sql 字符串,需要执行的SQL语句
211.       */
212.      public function query($sql)
213.      {
214.          return $this->_db->exec($sql);
215.      }
216.
217.      /**
218.       * 返回最后执行的SQL语句供分析
219.       */

    * D:\Apache2\htdocs\test\SpeedPHP\Extensions\session_mysql.php on line 53

48.      $sql="REPLACE INTO `hotlinetask`.`".$this->table."` (sessionid, data, lastvisit) VALUES('$id', '".addslashes($sess_data)."', '".$this->time."')";
49.      //echo $sql;
50.      //var_dump($this->sess);
51.      $d= spClass('Session_DB');
52.          //$this->sess->query($sql);
53.          $ret = $d->query($sql);
54.          //$link = mysql_connect('127.0.0.1','root','sun');
55.          //mysql_select_db('hotlinetask',$link);
56.          //echo $link;
57.          //$ret = mysql_query($sql,$link);
58.

2010-09-27 15:40:11

#2 jake

SP框架先更新到目前网站上的3.0版本。

另外,没看出有什么问题

2010-09-27 15:51:23

#3 dft2000

我已经测试了 最新版本
同样是不执行语句 并且没有错误。mysql_query 单单返回一个false。
mysql_error却返回空值

2010-09-27 16:03:39

#4 jake

试了一下上面的SQL,应该是没什么问题。

而且spModel在执行SQL的时候也很直接,和mysql_query差不多。

2010-09-27 16:21:35

#5 dft2000

我跟踪的结果是到这个sql执行之前 spModel的conn连接就坏了!
但是在之前执行最后一个sql也看不出来异常。
并且测试的结果在执行完这个sql的时候 conn还是正常的 但是一到这个过程 conn就坏了!

2010-09-27 17:04:58

#6 dft2000

很奇怪的问题 我是在写的用来代替session的对象,但是使用spModel 只有在read函数里 没有错误
改到其他write close gc 都不行,这个spModel的对象的conn就坏了!就没法执行任何sql了!
但是不清楚为什么他就坏了!

2010-09-27 17:34:04

#7 jake

conn坏了是什么意思?是不是在你的spModel继承类中,有覆盖了query和runSql中的conn呢?
而且执行完了conn就好了?:L

2010-09-27 17:39:03

#8 dft2000

估计要在query之前做个检查 连接失效的就要重新connect一下

2010-09-27 17:39:47

#9 dft2000

回复 7 jake


    没有覆盖conn对象
很奇怪 spmodel对象conn  在我session 回调一次之后
conn就不再是mysql 连接资源了 而是未知类型的资源

且无论是先初始化一个spmodel共用 或者在每个函数里 分别new对象 都是同样的问题

只要被回调一次后 conn就不能再被用了!


以后的sql 就全都出错了!

2010-10-11 11:40:42

#10 jake

spmodel的conn?

这里的数据库链接是
spmodel->_db->conn
这个是mysql的资源,也就是链接句柄,同时这只是一个驱动类的成员变量。

如果通过“回调”,conn变量的值不是原来的值了,那么原因只能是过程中有对它赋值或是覆盖。

2010-10-11 15:30:09

#11 dft2000

我在想办法跟踪  只要在回调函数 使用了spModel conn应该就是被释放了!

2010-10-12 09:22:20