函数内的php函数

时间:2010-12-21 20:47:32

标签: php mysql

我已经创建了一个简单的项目来帮助我掌握php和mysql,但是遇到了一个小问题,我有一个有效的解决方案,但是想了解为什么我不能以这种方式成功运行这个代码,生病解释:

我有一个功能,

function fetch_all_movies(){
        global $connection;
        $query = 'select distinct * FROM `'.TABLE_MOVIE.'` ORDER BY movieName ASC';
        $stmt = mysqli_prepare($connection,$query);
        mysqli_execute($stmt);
        mysqli_stmt_bind_result($stmt,$id,$name,$genre,$date,$year);
        while(mysqli_stmt_fetch($stmt)){
            $editUrl = "index.php?a=editMovie&movieId=".$id."";
            $delUrl = "index.php?a=delMovie&movieId=".$id."";
            echo "<tr><td>".$id."</td><td>".$name."</td><td>".$date."</td><td>".get_actors($id)."</td><td><a href=\"".$editUrl."\">Edit</a> | <a href=\"".$delUrl."\">Delete</a></td></tr>";    
        }
    }

这会获取我的数据库中的所有电影,然后我希望得到每部电影的演员数,所以我传入get_actors($ id)函数获取电影ID,然后给我计算多少演员被拍到电影中。

这是函数:

function get_actors($movieId){
        global $connection;
        $query = 'SELECT  DISTINCT COUNT(*) FROM `'.TABLE_ACTORS.'` WHERE movieId = "'.$movieId.'"';
        $result = mysqli_query($connection,$query);
        $row = mysqli_fetch_array($result);
        return $row[0];
    }

这些函数在单独调用时都很完美,我只是想了解当我在函数内部传递函数时我得到这个警告:

  

警告:mysqli_fetch_array()期望   参数1是mysqli_result,   给出的布尔值   /Applications/MAMP/htdocs/movie_db/includes/functions.inc.php   在第287行

任何人都可以帮我理解为什么吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

mysqli_query无法运行您的查询:

  

失败时返回FALSE。对于   成功的SELECT,SHOW,DESCRIBE或   EXPLAIN查询mysqli_query()会   返回一个结果对象。对于其他   成功的查询mysqli_query()会   返回TRUE。

在运行mysqli_fetch_array test $ result之前......类似于:

if ($result !== false)
    $row = mysqli_fetch_array($result);
else
    return false;

似乎是SQL语句中的变量范围问题。输出SQL应该显示“true”错误。

答案 1 :(得分:0)

如果出现错误,mysqli_query将返回false。您必须以一种简单的方式处理错误:

$result = mysqli_query($connection,$query);
if (!$result) {
    die(mysqli_error($connection));
}
$row = mysqli_fetch_array($result);

请注意,终止(通过执行die())通常不是对错误做出反应,记录它,给用户anice错误页面等的好方法。这是alsonogood做法给出低级错误消息toauser,这可能激励用户尝试利用可能的安全问题。

最后一句话:你在写

$query = 'SELECT  DISTINCT COUNT(*) FROM `'.TABLE_ACTORS.'` WHERE movieId = "'.$movieId.'"';

你应该正确地逃离那里的movieId。

答案 2 :(得分:0)

您可能希望尝试使用包含函数的类,例如:

class getInfo {

function fetch_all_movies(){
        global $connection;
        $query = 'select distinct * FROM `'.TABLE_MOVIE.'` ORDER BY movieName ASC';
        $stmt = mysqli_prepare($connection,$query);
        mysqli_execute($stmt);
        mysqli_stmt_bind_result($stmt,$id,$name,$genre,$date,$year);
        while(mysqli_stmt_fetch($stmt)){
            $editUrl = "index.php?a=editMovie&movieId=".$id."";
            $delUrl = "index.php?a=delMovie&movieId=".$id."";
            echo "<tr><td>".$id."</td><td>".$name."</td><td>".$date."</td><td>".get_actors($id)."</td><td><a href=\"".$editUrl."\">Edit</a> | <a href=\"".$delUrl."\">Delete</a></td></tr>";    
        }
    }

function get_actors($movieId){
        global $connection;
        $query = 'SELECT  DISTINCT COUNT(*) FROM `'.TABLE_ACTORS.'` WHERE movieId = "'.$movieId.'"';
        $result = mysqli_query($connection,$query);
        $row = mysqli_fetch_array($result);
        return $row[0];
    }

}

$showInfo = new getInfo;

//fetch all movies
$showInfo->fetch_all_movies();

//List actors from movie 1
$showInfo->get_actors("1");