我已经编写了下面的代码来从表中返回一个值,但它似乎不起作用。知道为什么吗?
$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 :(得分: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.';
}