首页 > 解决方案 > 在 PHP 中导入带有 MySQLi 函数的文件会中断调用页面

问题描述

主文件

在导入 config.php、clubsData.php 并调用 checkEnrollment() 时,我的数据库 $link 未定义。这会中断所有查询并输出警告,例如“mysqli_prepare() 期望参数 1 为 mysqli,给定 null...”

session_start();
require_once($_SERVER['DOCUMENT_ROOT']."/imports/config.php");
require_once($_SERVER['DOCUMENT_ROOT']."/imports/clubsData.php");
checkEnrollment($user_id, $clubid);

配置文件

$DB_SERVER = getenv('DB_HOST');
$DB_USERNAME = getenv('DB_USER');
$DB_PASSWORD = getenv('DB_PASSWORD');
$DB_NAME = getenv('DB_NAME');

$link = mysqli_connect($DB_SERVER, $DB_USERNAME, $DB_PASSWORD, $DB_NAME);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

俱乐部数据.php

function checkEnrollment($user_id, $club_id) {
    $sql = "SELECT role FROM in_clubs WHERE user_id = ? AND club_id = ?";
    $stmt = mysqli_prepare($link, $sql);
    mysqli_stmt_bind_param($stmt, "ss", $param_user_id, $param_club_id);
    $param_user_id = $user_id;
    $param_club_id = $club_id;
    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_result($stmt);
    mysqli_stmt_fetch($stmt);
    if(mysqli_stmt_num_rows($stmt) == 1){       
        return true;
    } else {
        return false;
    }
    mysqli_stmt_close($stmt);
}

标签: phpmysqli

解决方案


为此,您需要将 $link 变量作为参数传递给函数,与传递 $user_id、$club_id 参数的方式相同。

像这样定义你的函数:

function checkEnrollment($user_id, $club_id, $link) {
$sql = "SELECT role FROM in_clubs WHERE user_id = ? AND club_id = ?";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, "ss", $param_user_id, $param_club_id);
$param_user_id = $user_id;
$param_club_id = $club_id;
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_fetch($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){       
    return true;
} else {
    return false;
}
mysqli_stmt_close($stmt);
}

然后像这样调用它:

checkEnrollment($user_id, $clubid, $link);

推荐阅读