2013-02-02 58 views
0

我已經寫了下面的代碼來從表中返回一個值,但它似乎並沒有工作。任何想法爲什麼?foreach不返回單個值

$pmname = $pdo->quote($_SESSION['pmname']); 
$sql = "SELECT img FROM pm_user WHERE name=$pmname"; 
$result = $pdo->query($sql); 
foreach ($result as $row) 
{ 
echo $row["img"]; 
} 
+0

@qeremy你如何處理PDO中的一個行集? – methuselah

+0

有了這麼多的信息,可能有1000個原因...檢查* pmname *,數據庫內容,數據庫連接,會話狀態僅舉幾例 –

+0

如果你需要一個值,那麼爲什麼你使用循環呢?只要得到結果的第一價值。 –

回答

1

爲什麼你不是fetch -ing什麼?嘗試進行更換操作foreach有:

while($row = $result->fetch(PDO::FETCH_ASSOC)) 
{ 
    echo $row['img']; 
} 

甚至,如果你確定只有一個單行:

$row = $pdo->query('your query')->fetch(PDO::FETCH_ASSOC); 
echo $row['img']; 

能夠很好做的伎倆,雖然我還沒有嘗試過這一點 - 但。

0

你需要在某處做一個fetch。如果您想要使用foreach結構,請使用fetchAll將結果集存儲在變量中,然後遍歷它。

$pmname = $pdo->quote($_SESSION['pmname']); 
$sql = "SELECT img FROM pm_user WHERE name=$pmname"; 
$rows = $pdo->query($sql)->fetchAll(); 
foreach ($rows as $row) 
{ 
    echo $row["img"]; 
} 

編輯 - 更重要的是: 你應該只是傳遞$pmname在通過quote方法。見PHP手冊PDO ::報價

如果您正在使用此功能來構建SQL語句,你 強烈建議使用PDO ::準備()準備SQL語句 與綁定參數,而不是使用PDO的::引用()

你真的應該做如:

$sql = "SELECT img FROM pm_user WHERE name=:pmname"; 
$stm = $pdo->prepare($sql); 
$stm->execute(array(':pmname' => $_SESSION['pmname'])); 

$rows = $stm->fetchAll(); 
foreach ($rows as $row) 
{ 
    echo $row["img"]; 
} 
0

您應經常檢查輸入數組變量爲一個foreach和行數從數據庫返回。當您沒有任何查詢數據庫的值時,可避免生產代碼中的警告/錯誤。

在你的例子中,你可以用empty()php函數來檢查。例如:

$pmname = $pdo->quote($_SESSION['pmname']); 
$result = $pdo->query("SELECT img FROM pm_user WHERE name=$pmname"); 

if($pdo->rowCount() > 0 && !empty($result)) 
{ 
    foreach ($result as $row) 
    { 
     echo $row["img"]; 
    } 
} 
else 
{ 
    echo 'No user image found in database.'; 
}