1

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

未定义变量:链接

我的代码如下:

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连接在includes/connect函数在includes/functions调用函数在index

4

2 回答 2

4

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

global $link;

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

从上面的参考:

此脚本不会产生任何输出,因为 echo 语句引用了 $a 变量的本地版本,并且尚未在此范围内为其分配值。您可能会注意到这与 C 语言有点不同,因为 C 中的全局变量自动可用于函数,除非被局部定义特别覆盖。这可能会导致一些问题,因为人们可能会无意中更改全局变量。在 PHP 中,如果要在函数中使用全局变量,则必须在函数中声明它们为全局变量。

于 2012-10-11T22:34:01.997 回答
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);
于 2012-10-11T22:37:40.000 回答