How do I allow a function to access a database connection without using GLOBAL?
config.php
DEFINE ('DB_HOSTNAME', 'hostname');
DEFINE ('DB_DATABASE', 'database');
DEFINE ('DB_USERNAME', 'username');
DEFINE ('DB_PASSWORD', 'password');
$dbc = mysqli_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
if(!$dbc) die("Unable to connect to MySQL: " . mysqli_error($dbc));
functions.php
function something()
{
$info = mysqli_query($dbc, "SELECT info FROM text") or die("Error: ".mysqli_error($dbc));
}
The above gives me the following error: mysqli_query() expects parameter 1 to be mysqli, null given in
Use function parameters
function arguments
its so simple just pass your $conn variable into another calling function(instead of making new connection) like
yourpage.php
Note:This is not good practice to always make new connection for database access.so always make connection once and use it every where.(but if your requirement different and require multiples connections then you can make multiples connections)
Either pass the database handle to your function, as @KingCrunch and others have said, or call a function that returns the handle:
In
config.php
:In
functions.php
:You may wish to look at The mysqli Extension and Persistent Connections for details on how you can prevent the connection from being re-established on each call to
get_dbc()
. There are alternative approaches to this, such as creating a singleton class for your database connection.There are two ways one is by passing arguments and the other by using function closure like @Ondrej said. But I wonder both of these require you to modify the code if that is the case, then I would suggest you to use
global
keyword.You can use
global
keyword to get the scope of variable$dbc
Try this..
(OR)
Try this...
& do this ....
There are more ways. You could use classic procedural style:
or anonymous function (if you use PHP5.3):