Jake,$conditions 有点小问题。

#1 steptt

我是新手,正在用SpeedPHP写一个资产管理网站,写了个函数:

function getrootid($what_id=1)
{
        $conditions = " `what_id`=".$what_id;
        //$conditions = array( 'what_id' => $what_id );  
        $Result=$this->findAll($conditions,"`Lft` ASC LIMIT 1 ");
        if($Result){
                return $Result['CatagoryID'];
                }else{
                return 0;
        }
} // end func



其中用到$conditions,如果使用$conditions = array( 'what_id' => $what_id );的话,正常,但使用$conditions = " `what_id`=".$what_id; 就提示:
SELECT * FROM tree WHERE `what_id`= ORDER BY `Lft` ASC LIMIT 1
执行错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY `Lft` ASC LIMIT 1' at line 1
显然$what_id值没有生成到sql语句中,如果我改成$conditions = " `what_id`=".$what_id."  d "; 错误提示变为:
SELECT * FROM tree WHERE `what_id`=1 d ORDER BY `Lft` ASC LIMIT 1
执行错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'd ORDER BY `Lft` ASC LIMIT 1' at line 1

显然$what_id值已经生成到sql语句中了,很是奇怪,怎么后面随便加个非空的字符串就赋上值了。

我想,应该是个bug吧。希望改进一下。

2011-03-21 15:42:13

#2 steptt

还有这样的问题:

         $conditions = " `Rgt`>=$Rgt and `what_id`=$what_id ";         $row = array('Rgt'=>'Rgt'+2);         $this->update($conditions, $row);


通过dumpSql(),知道实际执行的是:
UPDATE tree SET Rgt = 2 WHERE `Rgt`>=2 and `what_id`=2
可我本意是想要:
UPDATE tree SET Rgt = Rgt+2 WHERE `Rgt`>=2 and `what_id`=2,我在$row = array('Rgt'=>'Rgt'+2);已经写明了的,但为什么不行呢?请指点!

2011-03-21 23:16:24

#3 jake

上面的问题,你可以输出$conditions字符串看看,直接用字符串来作为条件的时候,SP没有对条件字符串进行任何的修改,所以你可以看看字符串的拼装有没有问题。

另外,findAll的使用可以参考手册,limit参数是在第四个参数的位置,建议不要直接写到ORDER BY的位置上面findAll($conditions," Lft ASC ", '*', '1');

下面的问题,update的第二个参数是不能这样用的,那是PHP数组的限制,如果是array('Rgt'=>'Rgt'+2),在PHP里面的意思,并非可以接受到'Rgt'+2的一个字符串,而是会运算相加,'Rgt'会被计算成数值然后和后面2相加,最终变成array('Rgt'=>某个数值)这样的数组。

2011-03-22 07:26:21

#4 steptt

多谢jake,第一个问题果然是参数的问题,我按你的提示,把四个参数全写齐了,问题解决了。
第二个问题,怎么样才能实现 UPDATE tree SET Rgt = Rgt+2 ...而不是UPDATE tree SET Rgt = 2 呢?

2011-03-22 10:26:47

#5 steptt

多谢jake,第一个问题果然是参数的问题,我按你的提示,把四个参数全写齐了,问题解决了。
第二个问题,怎么样才能实现 UPDATE tree SET Rgt = Rgt+2 ...而不是UPDATE tree SET Rgt = 2 呢?

2011-03-22 10:26:49

#6 jake

用incrField

http://speedphp.com/post/model-incr.html

2011-03-22 10:52:57

#7 steptt

多谢!问题解决了!

2011-03-22 12:18:06