我目前正在尝试访问我的数据库但收到消息
未定义的变量:链接
我的代码如下:
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中 该功能在包含/功能中 调用该函数在索引
中答案 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);