2016-02-19 48 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我編輯答案,以添加一個不同的方式來做到這一點的建議。 –

相關問題