2

我有這個疑問:回波圖像

$q4 = "SELECT TOP 5 b.BadgeName, b.BadgeImage FROM BadgeImageTable AS b 
INNER JOIN employee_badge AS e 
ON e.badge_id = b.BadgeID 
WHERE e.employee_id = 2164 
ORDER BY e.earned_on DESC "; 
$stmt3=sqlsrv_query($conn,$q4); 
if($stmt3==false) 
{ 
echo 'error to retrieve info !! <br/>'; 
die(print_r(sqlsrv_errors(),TRUE)); 
} 

查詢返回此:

weer

在我的PHP

現在,我試圖呼應如果查詢給出了多於3行的數據,那麼來自'BadgeImage'列的任意三個隨機圖像。否則,如果查詢給出2行,則僅顯示2個圖像,如果1行,僅顯示1'badgeImage'等等。

PHP代碼,我試圖和未給予正確的結果:

<div class="badgesize"> 
       <?php 

       if($count = sqlsrv_num_rows($stmt3) > 0){ 
       while($recentBadge = sqlsrv_fetch_array($stmt3)){ 
        $result[] = $recentBadge; 
       } 

       if($count > 3){ 
        foreach(array_rand($result, 3) as $val){ 
        $data[] = $result[$val]; 
        } 
        $result = $data; 
       } 

       foreach($result as $recentBadge){ 
        echo $recentBadge['BadgeName'], '<img src="'.$badgerecent['BadgeImage'].'">'; 
       } 
       } else { 
       echo 'no results'; 
       } 

       ?> 
      </div> 

當我運行上面的PHP它給「無結果」 INH的UI,即「它不運行如果聲明」,並直接到PHP的其他部分。 這shouldnot發生,因爲查詢取5行數據,如上面的圖片。

當我試圖簡單地echo(使用下面的代碼)沒有上述條件,我能夠這樣做沒有任何問題。

<img src="<?php echo "".($recentBadge['BadgeImage']).""; ?>" > 

我使用PHP 38年5月5日和SQL Server 2012

+0

爲什麼不直接在查詢中使用「LIMIT 3」? –

+0

限制3不能用於SQL服務器... @u_mulder – jane

+0

http://stackoverflow.com/questions/971964/limit-10-20-in-sql-server –

回答

1

顯然sqlsrv_num_rows()不會返回它解釋here

另外,您可以使用修復或者你可以使用下面的代碼期望的結果:

if(sqlsrv_has_rows($stmt3)){ 
    while($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) { 
    $recentBadge[] = $row; 
    } 

    if(count($recentBadge) > 3){ 
    foreach(array_rand($recentBadge, 3) as $key){ 
     $data[] = $recentBadge[$key]; 
    } 
    $recentBadge = $data; 
    } 
} else { 
    $recentBadge = []; 
} 

foreach($result as $recentBadge){ 
    echo $recentBadge['BadgeName'], '<img src="'.$badgerecent['BadgeImage'].'">'; 
} 

這種方式,我們正在檢查是否有被發現的行,是這樣的,將它們全部存儲在一個數組中,而是統計數組的大小。

1

更換

if($count = sqlsrv_num_rows($stmt3) > 0){ 

$count = sqlsrv_num_rows($stmt3); 
if($count > 0){ 
+0

謝謝try.But它沒有幫助。 – jane

2

更改如下:

if($count = sqlsrv_num_rows($stmt3) > 0){ 

$count = sqlsrv_num_rows($stmt3); // getting the record count 
    if($count > 0){     // checking if there is some rows present or not 
    while($recentBadge = sqlsrv_fetch_array($stmt3)){ 
    // your code 
    } 
} 

還有一件事不把圖像的完整路徑badgeImage列,因爲這時候你從本地移動代碼服務器將創建問題。只保留圖像文件夾和圖像名稱的路徑。

+0

感謝buddy.we會記住你的建議。回到上面的問題,當我改變代碼,就像你說的那樣,它沒有解決問題,它仍然會去代碼的「其他」部分。 – jane

+0

檢查通過回顯的記錄數 –

+0

它沒有給出任何數字,當我回顯「$ count」 – jane