Jake,$conditions 有点小问题。
发布于:2022-01-17 09:50:54
#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
#7 steptt
多谢!问题解决了!
2011-03-22 12:18:06