2012-11-04 151 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