我有这个问题:
$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中,我试图回显来自'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
答案 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'].'">';
}
这样我们就可以检查是否找到了行,就这样,将它们全部存储在数组中并计算数组的大小。