Php 函数return empty然后显示echo no videos

Php 函数return empty然后显示echo no videos,php,function,Php,Function,因此,我有一段代码,它从数据库中获取视频,所有工作正常,但当结果为空时,它会显示错误(例如,如果没有与电影名称匹配的视频,则会显示警告:为foreach()提供的参数无效)我想做的是,如果没有与电影名称匹配的视频,则显示echo no videos。我的代码: function fetchvideo($mtitle=NULL) { if($mtitle!=NULL) { $column = "moviename"; $data = $mtitle;

因此,我有一段代码,它从数据库中获取视频,所有工作正常,但当结果为空时,它会显示错误(例如,如果没有与电影名称匹配的视频,则会显示
警告:为foreach()提供的参数无效
)我想做的是,如果没有与电影名称匹配的视频,则显示echo no videos。我的代码:

function fetchvideo($mtitle=NULL)
{
    if($mtitle!=NULL) {
        $column = "moviename";
        $data = $mtitle;
    }
    global $mysqli; 
    $video= $mysqli->prepare("SELECT vid,image,title,moviename FROM movie_videos WHERE $column = ?");
    $video->bind_param('s', $data);
    $video->execute();
    $video->bind_result($vid,$vimage,$vtitle,$moviename);
    while ($video->fetch()){
        $row[] = array('vid' => $vid, 'image' => $vimage, 'title' => $vtitle, 'moviename' => $moviename);
    }
    $video->close();
    return ($row);
}

不会显示引发错误的代码,因为不会显示foreach的
。但是,通过在上述函数中添加一行可以轻松解决此问题:

function fetchvideo($mtitle=NULL)
{
    if($mtitle!=NULL) {
        $column = "moviename";
        $data = $mtitle;
    }
    global $mysqli; 
    $video= $mysqli->prepare("SELECT vid,image,title,moviename FROM movie_videos WHERE $column = ?");
    $video->bind_param('s', $data);
    $video->execute();
    $video->bind_result($vid,$vimage,$vtitle,$moviename);

    $row = array();

    while ($video->fetch()){
        $row[] = array('vid' => $vid, 'image' => $vimage, 'title' => $vtitle, 'moviename' => $moviename);
    }
    $video->close();
    return ($row);
}
通过添加
$row
声明,您可以确保始终返回一个数组,当未找到视频时,该数组为空。然后,您可以在执行foreach循环之前检查是否存在视频,如果没有视频可用,则显示相应的消息:

if (!empty($row)) {
    foreach ($row as $video) {
        // Show video
    }
} else {
    echo 'No videos';
}

因为它不能循环通过空的东西。输出可以是null/false/0,也可以是更多的“负值”。在我看来,最好这样做:
如果count($array)==0
做一些我知道的事情,但是如果数据库中的结果是空的,因为如果没有匹配的行,它会显示错误,那么有没有办法显示
没有结果
,我对mysqli/pdo不太在行,但是必须有一个计数函数。如果你对结果进行计数,你就会得到结果。您可以返回一条自定义错误消息,如:在函数中“未找到视频”,或im使用foreach()的位置。请参阅plenka的答案@user3499463