php - 在 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);
}
解决方案
为此,您需要将 $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);
推荐阅读
- docker - Docker - 检索具有 CLSID 的组件的 COM 类工厂
- unit-testing - CaseComment 对象上的触发器没有覆盖
- javascript - CSS 效果因页面重新加载而消失
- apache-spark - Pinot spark 摄取 glob 输入 uri 无法按预期工作
- blockchain - Corda - 状态大小信息
- angular - 如何在nest中订阅redis频道?
- r - 枢轴宽 df 但 values_from 不等于 R
- ruby-on-rails - 在 Ruby on Rails 中使用网络摄像头
- python - 如何修复“值错误坏透明度掩码”?
- swift - UIImageView 上的捏合、平移和双击手势