Global Scope fails for included file

Viewed 54

Can someone please help me with a scoping issue. I've been looking at this for so long and I just don't see why this isn't working:

connection.php

<?php

$hostname = "xxx.xxx.xxx.xxx";
$username = "xxxxxxxx";
$password = "xxxxxxxx";
$db_name = "xxxxxxxx";

function isSecure() {
  return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
      || $_SERVER['SERVER_PORT'] == 443;
}

global $link;
$link = mysqli_connect($hostname, $username, $password, $db_name);

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit();
}

?>

builder.php

<?php
    $path = $_SERVER['DOCUMENT_ROOT'];
    $connection = $path . '/scripts/connection.php';
    include_once ($connection);

    session_start();
    $club_id = $_SESSION['club_id'];
    
    if (mysqli_connect_errno()) {
        trigger_error("Failed to connect to MySQL: " . mysqli_connect_error());
        exit();
    }
    
    $sql = "SELECT * FROM Workout_types
            WHERE club_id=$club_id
            ORDER BY type";

    $result = mysqli_query($link, $sql) or trigger_error("Error description:" . mysqli_error($link) . "done");
    
?>

and I get the dreaded

mysqli_query() expects parameter 1 to be mysqli, null given in...

error.


Implementing the troubleshooting tips below, I changed a couple of lines.

builder.php:

require_once ("../scripts/connection.php");

connection.php:

if (!$link) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit();
}

It still doesn't work, but the errors are a bit different:

PHP Warning:  mysqli_query(): Couldn't fetch mysqli in G:\PleskVhosts\example.com\httpdocs\workouts\builder.php on line 114
PHP Warning:  mysqli_error(): Couldn't fetch mysqli in G:\PleskVhosts\example.com\httpdocs\workouts\builder.php on line 114
PHP Notice:  Error description:done in G:\PleskVhosts\example.com\httpdocs\workouts\builder.php on line 114

where line 114 is the mysqli_query line.

I checked the GoDaddy docs, and that path is correct.


Just to prove that my include path was correct, I added this to connection.php:

global $test;
$test = "hello world";

Then in builder.php, I added a line echo $test;, and it printed hello world with no trouble whatsoever.


I should mention two other things could be helpful:

  1. The code that I posted for builder.php is embedded in html code for a web page. It's the only php code in that file.

  2. I originally wrote this code about 5 years ago, and it's been functioning flawlessly until I upgraded the php version on my server from 5.6.40 to 7.3.27. That's when it began to fail.

0 Answers
Related