2016-02-19 49 views
0

我试图输出用户配置文件图像或显示一个虚拟图像,如果用户还没有上传个人资料图片。从数据库中提取此信息的查询正常工作。我已经使用了'if'语句来检查该行是否包含一个值,并且直到我尝试从数据库中回显某些内容时才会生效。一个文件路径。然后,我得到这个错误:为什么我会得到警告:使用PDO :: fetchColumn时非法字符串偏移量?

Warning: Illegal string offset

而且图像不显示,我得到

Object not found

下面请看看我的代码。我将不胜感激任何建议。

$query = $db->query("SELECT * from members where username = '".$_SESSION['username'] ."'"); 

$row = $query->fetchColumn(); 

if (isset($row) && $row == true) { 
    echo '<img width="100" height="100" src="'.$row["profile_pic"].'"/>'; 
} else { 
    echo "no profile pic"; 
} 

回答

1

使用fetchColumn()的好处是它返回单个值。这可以通过删除引用数组键的必要性来稍微简化代码,如果您只需要来自一列的值。它不工作,因为您正在使用$row["profile_pic"]$row不是数组。

如果你打算使用fetchColumn(),你需要做两件事情之一:

  1. 修改您的查询,以便它只能获取你想要的列, 而不是使用*。那么你的代码将需要

    $query = $db->query("SELECT profile_pic from members..."); 
    
    $src = $query->fetchColumn(); 
    if ($src) { 
        echo '<img width="100" height="100" src="'.$src.'"/>'; 
    
  2. 添加一个数字,以fetchColumn()表示要 获取哪一列。那么你的代码将需要

    $query = $db->query("SELECT * from members..."); 
    
    $src = $query->fetchColumn(4); 
    // or whatever the numeric index of the column you want is 
    if ($src) { 
        echo '<img width="100" height="100" src="'.$src.'"/>'; 
    

无论这些应该工作。但是我还应该提到,如果要使用查询中的任何其他列,则不应使用fetchColumn(),因为一旦完成此操作,您将无法访问查询结果的该行中的任何其他列。如果是这样的话,你可以改变你取从

$row = $query->fetchColumn(); 

$row = $query->fetch(PDO::FETCH_ASSOC); 

,那么你仍然可以从该行获得其他列,你仍然可以使用$row["profile_pic"]为你做在您的原始代码中。


为了解决您的意见,我会建议,以显示默认图像做这个,如果没有一个在你的数据库是设置$src到默认图像路径,如果它是空的方式,像这个:

$src = $query->fetchColumn(); 
if (!$src) { 
    $src = 'default_image.png'; // or whatever the path/filename is 
} 
echo '<img width="100" height="100" src="'.$src.'"/>'; 
+0

害怕它似乎不工作:(..它现在将默认为数据库中的图像,只是显示一个空白的方块,如果没有图像在数据库中的任何想法?谢谢 –

+0

我没有添加任何代码来显示一个默认图像,你应该可以通过添加一个'else'来反映'img'标签与'src =你的默认图像路径。' –

+0

@astricmobiles我编辑答案,以添加一个不同的方式来做到这一点的建议。 –

相关问题