访问函数外部的变量

时间:2012-10-11 22:32:40

标签: php function

我目前正在尝试访问我的数据库但收到消息

  

未定义的变量:链接

我的代码如下:

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'penbird098');
define('DB_NAME', 'cmstest');

$link = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_error($link));
mysqli_set_charset($link, 'utf8');

function getPosts(){

    $query = "SELECT * FROM post" or die($link);
    $result = mysqli_query($link, $query);
    $num = mysqli_num_rows($result);

    if($num > 0){

        while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
            echo $row['Title'];
        }

    }
}  

getPosts();

我做错了什么?我已经阅读了这些代码并重新阅读了几次以及在Google上查看并随机尝试不同的可能性,但无法解决原因。我猜测它无法将函数外部的变量传递给函数,但如果我是对的,我不知道如何做到这一点或者最好的方法是做什么,我们将非常感谢您的建议。

此外,我正在尝试使用我的代码的最佳实践,所以其他任何不正确的事情都会很有用。

PS 连接在include / connect中 该功能在包含/功能中 调用该函数在索引

2 个答案:

答案 0 :(得分:4)

将以下行添加到您的函数中:

global $link;

请参阅有关在函数范围中使用全局变量的参考:http://php.net/manual/en/language.variables.scope.php

从以上参考文献:

  

由于echo语句,此脚本不会产生任何输出   指的是$ a变量的本地版本,但它还没有   在此范围内分配了一个值。您可能会注意到这是一个   与C中的全局变量中的C语言略有不同   除非特别说明,否则可自动使用   被本地定义覆盖。这可能会导致一些问题   人们可能无意中改变了一个全局变量。在PHP全局   如果变量必须在函数内声明为全局变量   用于该功能。

答案 1 :(得分:2)

您可以将其作为参数传递或将其用作全局参数;

function getPosts($dbLink){
 ....
}

或者:

function getPosts(){
   global $link;
}

但您的代码中还有其他错误:

$query = "SELECT * FROM post" or die($link); 

不正确,这可能是你的意思:

$query = "SELECT * FROM post";
$result = mysqli_query($link, $query) or die("Error: ".mysql_error());
$num = mysqli_num_rows($result);