请教一个怪怪的问题

#1 xpp1000


lass od extends spModel{//单页
          var $pk = "id";
          var $table = "dingdan";
function dy1($id)//已打印
{$cond=array('id'=>$id);
$this->updateField($cond,'dy',1);
         }
}这是一类的一个方法
function dy1()//已打印
{$ddid=$this->spArgs('ddid');
$sp=spClass('od');
$sp->dy1($ddid);
echo $sp->dumpSql();
echo 1;
        }
这个打印出来竟然是这个describe dingdan 1不明白这个是如何来的,用update方法也是这个

2017-02-23 16:09:50

#2 jake

看看源码可以知道为什么的。

dumpSql是显示最后一次的sql

然后我们跟踪一下

1. 首先在driver里面的数据库驱动文件里面,可以找到DESCRIBE的sql语句,它在getTable函数里,从名字可以猜到它是取得表的结构的作用。
2. 然后回到core的spmodel文件里面,在__prepera_format函数里面,看代码可以知道__prepera_format是把SQL返回的表结构,变成数组格式的过程。
3. 搜索__prepera_format的调用,发现在create和update两个函数里会使用。作用都是将输入的$row变量,进行格式化——这里的操作是将非表字段的项去掉,保留表字段对应的数组,这样就是我们平时看到的create的参数那样的用法了,这里还有个作用就是即使create里面多了一些别的字段(不是表字段),那么也会被忽略而不会出错。

2017-02-23 16:50:24

#3 xpp1000

找到原因了,数据库的问题,增加了一个字段,竟然没有成功,重启数据库,重新加了一次就正常了

2017-02-23 17:11:55

#4 xpp1000

谢谢jake细心的帮助,thinks

2017-02-23 17:13:44