2012-11-04 237 views
0

我遇到了从我的PDO语句返回值的问题。从PDO查询返回值的问题

这是我的代码:

//Execute test 
$this->checkConnect(); 
$stmt = $this->dbh->prepare("SELECT p_id FROM People WHERE lastName = :param1 AND firstName = :param2"); 
$stmt->bindParam(':param1', $this->lName); 
$stmt->bindParam(':param2', $this->fName); 
$stmt->execute(); 
$count = $stmt->rowCount(); 

//Determine value of test 
if($count == FALSE) 
{ 
    return FALSE; 
} 
else 
{ 
    $dummyvar = $stmt->fetch(); 
    $this->p_id = implode($dummyvar); 
} 

当我正在经历我的数据库中的记录,我注意到某个值从我不得不投入是关闭的。当我执行查询时,它应该从表People中获取p_id的值。够简单。但是,发生的情况是该号码被附加了两次。例如,说p_id等于1. this->p_id将等于11.或者是p_id等于2,输出将是22.我在MySQL中执行了这个查询,并且该值是正确的。我不确定我的PHP代码中发生了什么。也许与内爆有关?我不确定。

任何洞察力将不胜感激。

此外:我还应该说明p_id是唯一的,因此只能返回一个值。

+1

顺便说一句,你不能依赖于'PDOStatement对象:: rowCount时() '在SELECT语句之后:并非所有司机都会回复有意义的回应。相反,调用'fetch()'并将结果与​​'false'比较。请参阅[rowCount文档](http://www.php.net/manual/en/pdostatement.rowcount.php)。 – slashingweapon

+0

我读过。在这种情况下,它似乎可以达到预期的目的。在某些情况下,我已将其更改为您提及的相同方法。 – Mlagma

回答

0

首先,您的读取声明并未返回您认为的内容。默认的输出数组将有两列名键和数字键,这样的事情:

array(
    0 => 1, 
    'pid' => 1, 
) 

你可能想只是一个数字索引的数组。使用PDO::FETCH_NUM这样的:

$dummyvar = $stmt->fetch(PDO::FETCH_NUM); 

第二,如果你要输出多个字段(在此情况下,很明显),那么你必须解决您的破灭声明。您必须告诉它要在不同的数组值之间插入什么字符。

$this->p_id = implode(' ', $dummyvar); 

例如:

echo implode(', ', array('a', 'b', 'c')); 
> 'a, b, c' 

参考文献:

+0

很好的解释。我将'fetch()'修改为'fetch(PDO :: FETCH_NUM)'并且它做了诀窍。谢谢。 – Mlagma