medievalman
asked on
Help with PHP Variable Scope
I have a script that calls a function which runs a query and returns a result. The calling script includes an application file at the top via require_once. This application file includes my session, database connection, function, and other often needed scripts using the same method, via require_once.
I call the function from inside the script and get an error because it is not able to find my dbconnection variable (I am using mysqli). The only way I have been able to get the function to work is by including the dbconnection code inside the function.
How can I access that variable and not have to include the code a second time?
I call the function from inside the script and get an error because it is not able to find my dbconnection variable (I am using mysqli). The only way I have been able to get the function to work is by including the dbconnection code inside the function.
How can I access that variable and not have to include the code a second time?
//top of calling file
<?php require_once '../includes/application.php'; ?>
//contents of application file
<?php require_once("../includes/sessions.php"); ?>
<?php require_once("../includes/dbconnect.php"); ?>
<?php require_once("../includes/functions.php"); ?>
<?php require_once("../includes/validation_functions.php"); ?>
<?php require_once("../includes/breadcrumb.php"); ?>
//contents of dbconnect file
<?php
// Create a database connection
$dbhost = "";
// $dbuser = "";
// $dbpass = "";
$dbuser = "";
$dbpass = "";
$dbname = "";
$db = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
// Test if connection occurred.
if(mysqli_connect_errno()) {
die("Database connection failed: " .
mysqli_connect_error() .
" (" . mysqli_connect_errno() . ")"
);
}
?>
//function call from within the calling file
<?php
$crewresult = getCrewDescription($li["CrewId"]);
echo "Code: " . $crewresult['CrewCode'] . "Description: " . $crewresult['CrewDescription'];
?>
//finally the function itself
<?php
function getCrewDescription($CrewID) {
$querystring = " SELECT yadda";
$querystring .= " FROM yidda";
$querystring .= " WHERE yackity = ";
$querystring .= (int) schmackity;
$result_get_crew = mysqli_query($thisdb, $querystring);
if(!$result_get_crew) {
die("Database error in function getCrewDescription.");
}
if(mysqli_num_rows($result_get_crew)) {
while ($record = mysqli_fetch_assoc($result_get_crew)) {
$aarray_crew = array("CrewCode" => $record['CrewCode'], "CrewDescription" => $record['LongDescription']);
}
} else {
$aarray_crew = array("CrewCode" => 0, "CrewDescription" => "No Crew Found");
}
mysqli_free_result($result_get_crew);
return $aarray_crew;
}
?>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you, Dave. Declaring global $db in the function did the trick. The comments in the code section of my post were merely for guidance as to what code was where.
You're welcome, glad to help.
Learn about Dependency Injection. Using PHP require_once() gives you dependencies that are impossible to mock or test. Same thing with the global keyword. Injecting the dependencies (like the database connection and the function definitions) enables you to mock these dependencies, causing the mock objects to return predictable and testable values.
http://en.wikipedia.org/wiki/Dependency_injection