根据特定条件使用php回显图像

时间:2016-12-14 07:05:24

标签: php sql-server sql-server-2008 sql-server-2005 sql-server-2012

我有这个问题:

$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中,我试图回显来自'BadgeImage'列的任意三个随机图像,如果查询提供的行数超过3行。如果查询给出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时,它在UI中给出“无结果”,即“它没有运行if语句”并直接转到PHP的else部分。 当查询获取5行数据时,不应发生这种情况,如上图所示。

当我尝试在没有上述条件的情况下简单回应(使用下面的代码)时,我能够毫无问题地这样做。

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

我使用的是PHP 5.5.38和sql server 2012

3 个答案:

答案 0 :(得分: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列中放置图像的完整路径,因为当您将代码从本地移动到服务器时会产生问题。仅保留图像文件夹和图像名称的路径。

答案 1 :(得分:1)

替换

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

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

答案 2 :(得分: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'].'">';
}

这样我们就可以检查是否找到了行,就这样,将它们全部存储在数组中并计算数组的大小。