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