php - mysqli 连接在函数内部不起作用?

标签 php mysql function mysqli

<分区>

我在 php 函数内执行 mysql 查询时遇到了一些问题。我得到的错误是

Notice: Undefined variable: link in C:\path\api\inc\restFunctions.php on line 16

有几个文件互相调用,因此我将尝试概述必要的信息。

访问的 URL:

localhost/serverList/api/rest.php?action=allServers

serverList/api/rest.php

<?php
include 'inc/restFunctions.php';

$possibleCalls = array('allServers','allEnvs','allTypes','false');
if(isset($_GET['action'])){
    $action = $_GET['action'];
}
else{
    $action = 'false';
}


if(in_array($action,$possibleCalls)){
    switch ($action){
        case 'allServers':
            $return = allServers();
        break;
        case 'allEnvs':
            $return = allEnvs();
        break;
        case 'allTypes':
            $return = allTypes();
        break;
        case 'false':
            $return = falseReturn();
        break;
    }
}

serverList/api/inc/restFunctions.php

<?php
include ('inc/config.php');

function allServers(){
    $serverInfoQuery = "SELECT * FROM servers"
    $allServerResults = $link->query($serverInfoQuery);
    $json = array();
    while($row = $allServerResults->fetch_assoc()){
        $json[]['serverID'] = $row['serverID'];
        $json[]['environment'] = $row['environment'];
        $json[]['type'] = $row['type'];
        $json[]['serverIP'] = $row['serverIP'];
        $json[]['serverDescription'] = $row['serverDescription'];
        $json[]['serverCreatedBy'] = $row['serverCreatedBy'];
        $json[]['serverCreatedDtTm'] = $row['serverCreatedDtTm'];
        $json[]['serverUpdatedBy'] = $row['serverUpdatedBy'];
        $json[]['serverUpdatedDtTm'] = $row['serverUpdatedDtTm'];
    }
    $jsonResults = json_encode($json);
    return $jsonResults;
}
?>

serverList/api/inc/config.php

<?php
$host = 'localhost';
$user = 'userName';
$password = 'password';
$database = 'database';
$link = new mysqli($host, $user, $password, $database);
if (mysqli_connect_errno()) {
    exit('Connect failed: '. mysqli_connect_error());
}
?>

我已验证调用的查询有效。我还通过使用查询数据库的该软件的不同页面验证了连接信息(上面隐藏的)是否有效。

我假设我一定在某处遗漏了引述或括号,但我对它可能在哪里感到困惑。

最佳答案

问题在于 PHP 变量作用域。在第一次引用 $link 变量之前,在 allServers() 函数中添加这一行:

global $link;

在这里查看更多: http://php.net/manual/en/language.variables.scope.php

关于php - mysqli 连接在函数内部不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17554824/

相关文章:

php8.0-dev 包安装 PHP 8.1 依赖项

php - 如何在没有自动增量字段的表中对 PHPMyAdmin 中的结果进行排序

java - 递归函数可以在函数的原始调用中更改变量吗?

javascript - 未捕获的语法错误 : Unexpected token return - still no answer?

javascript - Uncaught ReferenceError : chart is not defined when using two charts

php - 从数据库获取信息时遇到问题

php - 如何使用维基百科 API

php - Windows MAMP - PHP CURL 问题

mysql - 在rdbms中存储临时和永久地址的方法

PHP MySQL LOAD DATA INFILE 帮助