【问题标题】:Echo images using php according to a particular condition [duplicate]根据特定条件使用php回显图像[重复]
【发布时间】:2016-12-14 07:05:23
【问题描述】:

我有这个问题:

$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));
}

查询返回这个:

现在在我的 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 时,它在 UI 中给出“无结果”,即“它没有运行 if 语句”并直接转到 PHP 的 else 部分。 这不应该发生,因为查询获取 5 行数据,如上图所示。

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

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

我使用的是 PHP 5.5.38 和 sql server 2012

【问题讨论】:

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


【解决方案1】:

更改以下内容:

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 列中,因为这会在您将代码从本地移动到服务器时产生问题。只保留图片文件夹的路径和图片名称。

【讨论】:

  • 谢谢哥们。会记住你的建议。谈到上面的问题,当我按照你说的那样更改代码时,它并没有解决问题。它仍然会转到“其他”部分代码。
  • 通过回显来检查记录数
  • 当我回显“$count”时,它没有给出任何数字
  • 表示结果集中没有可用的行
  • echo "$count" ; -- 当我使用这个时。
【解决方案2】:

显然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'].'">';
}

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

【讨论】:

    【解决方案3】:

    替换

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

    与

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

    【讨论】:

    • 感谢您的尝试。但它没有帮助。
    猜你喜欢
    • 2017-04-21
    • 2021-12-27
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2020-03-27
    相关资源
    最近更新 更多