我已經寫了下面的代碼來從表中返回一個值,但它似乎並沒有工作。任何想法爲什麼?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"];
}
我已經寫了下面的代碼來從表中返回一個值,但它似乎並沒有工作。任何想法爲什麼?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"];
}
爲什麼你不是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'];
能夠很好做的伎倆,雖然我還沒有嘗試過這一點 - 但。
你需要在某處做一個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"];
}
您應經常檢查輸入數組變量爲一個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.';
}
@qeremy你如何處理PDO中的一個行集? – methuselah
有了這麼多的信息,可能有1000個原因...檢查* pmname *,數據庫內容,數據庫連接,會話狀態僅舉幾例 –
如果你需要一個值,那麼爲什麼你使用循環呢?只要得到結果的第一價值。 –