好的,我有以下代码:
$sql="SELECT * FROM mytable WHERE p_id=$this->p_id AND pn_id=$this->pn_id AND vg_id=$this->vg_id";
$dump=$this->_db->query($sql);
if (PEAR::isError($dump)) die($dump->getMessage());
while ($data = $dump->fetchRow(DB_FETCHMODE_OBJECT)) {
print_r($data);
}
如果我回显$sql并在phpmyadmin中执行,一切都很好。不幸的是,在这个脚本中,它返回NULL。一个奇怪的问题是,如果我删除条件'p_id=$this->p_id',如:
$sql="SELECT * FROM mytable WHERE pn_id=$this->pn_id AND vg_id=$this->vg_id";
在phpmyadmin和脚本中都很好。所以,我可以假设db连接是正常的,查询是正常的,一切都是正常的。添加条件'p_id=$this->p_id'再次在脚本中导致NULL,并且在phpmyadmin中工作良好,并显示预期的结果。
有什么办法来修复这个奇怪的掉落吗?
编辑:当我回显$dump时,它触发以下错误消息:
PHP Catchable fatal error: Object of class DB_result could not be converted to string
$dump应该是一个资源,但它不是…?
下一个编辑:
当我返回$sql并将静态查询粘贴到脚本中时,一切正常:
$sql="SELECT * FROM mytable WHERE p_id=1 AND pn_id=2 AND vg_id=3";
我现在只有"p_id = 1"替换为"p_id = {$ this -> p_id}"……什么都没有,空无一物,没有结果。替换'pn_id=2'与'pn_id={$this->pn_id}'和'vg_id=3'与'vg_id={$this->vg_id}',它工作得很好…所有值均为整型,且set>0,无字符串。这让我很生气…!
$this->pn_id
需要是'{$this->pn_id}'
。你必须使用花括号,如果是字符串,不要忘记引号。也许很愚蠢,但我也假设你在class
里面使用$this
。public $pn_id;
也必须有一个初始值。在public
的情况下,你可以分配一个值,在调用class
的new
实例之后,在运行上面的代码应该在里面的任何方法之前。