求助:findSql有结果集但是取字段值是NULL?

#1 dongxu0139

今天遇到一个怪事,求高手看看是哪里出问题了。先贴代码:

function getcompanyinfo()
{
$cp_name=urldecode($this->spArgs("cp_name"));
$sql="SELECT * FROM cp_company WHERE cp_name = '".$cp_name."'";
$result=spClass("cp_company")->findSql($sql);
$rtn = array('cp_address' => $result['cp_address']);
echo json_encode($rtn);
}


echo $result是有值的,[{"cp_id":"36","cp_name":"641c72d0","cp_address":"4e2d56fd"}]
echo $rtn就是NULL了,{"cp_address":null}
当然,直接echo $result['cp_address']也是一样的NULL

2014-03-30 11:43:58

#2 jake

如果echo $result是显示字符串而不是Array,那么证明它不是数组,看起来很像json。

估计你的程序比较乱,因为findSql的结果肯定是数组,建议你findSql直接直接dump结果出来看看。

另外,是不是你的程序已经是被重新覆盖findSql的

2014-03-30 17:10:48

#3 dongxu0139

jake 发表于 2014-3-30 17:10
如果echo $result是显示字符串而不是Array,那么证明它不是数组,看起来很像json。

估计你的程序比较乱, ...
老大,我按你要求又精简了一下源码,去掉了无问题无关的转码,代码如下:

function getcompanyinfo()
{
$sql="SELECT * FROM cp_company LIMIT 1";
$result=spClass("cp_company")->findSql($sql);
}

如果下一句是dump($result);输出为
Array
(
    [0] => Array
        (
            [cp_id] => 1
            [cp_name] => 大食代
            [cp_address] => 世纪华联
        )
)

如果下一句是dump(json_encode($result));输出为
[{"cp_id":"1","cp_name":"大食代","cp_address":"世纪华联"}]

如果下一句是dump($result['cp_name']);输出为空

我的问题就是,为什么结果集有内容,按字段取值就为空了,我这是照着示例写的啊???

2014-03-30 23:18:07

#4 dongxu0139

解决了,使用dump($result[0]['cp_name']);就能取到值了,再问个别的问题,文档里写findsql是只查询一条记录,我实际使用发现是可以查询返回多条记录的,我看的文档不是最新的?

2014-03-30 23:39:08

#5 jake

dongxu0139 发表于 2014-3-30 23:39
解决了,使用dump($result[0]['cp_name']);就能取到值了,再问个别的问题,文档里写findsql是只查询一条记 ...
没听说过findSql只能查一条记录,也没有手册是这样写的,看看你的文档哪儿来的?

手册里面对findSql描述得并不多,主要是考虑到需要用SQL的、会dump一下结果的开发者,所以没做太多的说明。

2014-03-31 09:33:30