foreach不返回单个值

时间:2013-02-02 10:03:57

标签: php mysql pdo

我已经编写了下面的代码来从表中返回一个值,但它似乎不起作用。知道为什么吗?

$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"];
}

3 个答案:

答案 0 :(得分:1)

为什么你fetch没有任何东西?尝试将foreach替换为:

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

甚至,如果您确定只有一行:

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

可以做到这一点,虽然我还没试过 - 但是。

答案 1 :(得分: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 :: quote

  

如果您正在使用此函数来构建SQL语句,那么您就是   强烈建议使用PDO :: prepare()来准备SQL语句   使用绑定参数而不是使用PDO :: quote()

你应该这样做:

$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"];
}

答案 2 :(得分:0)

您应该始终检查输入数组变量,以查找从数据库返回的foreach和行数。当你没有得到任何查询dabatase的值时,这就避免了生产代码中的警告/错误。

在您的示例中,您可以使用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.';
}