0

我编写了以下代码以从表中返回单个值,但它似乎不起作用。知道为什么吗?

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

3 回答 3

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'];

可以很好地做到这一点,虽然我还没有尝试过 - 还没有。

于 2013-02-02T10:12:57.880 回答
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"];
}
于 2013-02-02T10:46:30.043 回答
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.';
}
于 2013-02-02T11:00:43.630 回答