7

I was recently introduced to the idea of classes in PHP, and after some research I've come to the conclusion that I need to store database related functions in a class to access later. It has worked for the most part, but some use cases I am still confused with. For example,

Below is an example of how I would normally connect to my database and display information from user id's in a table

dbcon.php:

<?php
$con = mysqli_connect("host","username","password","database") or die("Couldn't connect");

require_once("functions.php");
?>

functions.php

function getUserInfo($id) {
    $query = mysqli_query($con, "SELECT * FROM users WHERE id = '$id'");
    return mysqli_fetch_array($query);
}

Some random file:

require_once("dbcon.php");

$result = mysqli_query($con, "SELECT * FROM tablename");
while ($row = mysqli_fetch_assoc($result)) {
    $userinfo = getUserInfo($row['userid']);
    echo $userinfo['name'];
}

?>

I don't feel like this method of querying the database and displaying information is the neatest or most efficient way possible. I read this article about using classes to tamper with a database and call functions that I created in the class.

My first question is this: When I try to access $con in functions.php, it is undefined. How can I pass the variable from dbcon.php to functions.php over the require_once function?

I also would like to know what the best way to store my connection to the database is, and if there are any tutorials on how to set that up.

I hope you understood that lol.

3
  • php.net/manual/en/class.mysqli.php There actually is a class already for that :) Commented Jan 24, 2016 at 4:21
  • @developernaren Well dang. You learn something new every day :D Commented Jan 24, 2016 at 4:26
  • If you create a class to manage your connections, and you use the require_once command to add that class file. You just need to INSTANCE the class $myDBclass = new DBClass(), then use your con variable from your class, something like $myDBClass->con Commented Jan 24, 2016 at 4:27

3 Answers 3

9

You can do it like this way:-

Dbconnection.php:-

<?php
Class DbConnection{
    function getdbconnect(){
        $conn = mysqli_connect("host","username","password","database") or die("Couldn't connect");
        return $conn;
    }
}
?>

Function.php:-

<?php
require_once('Dbconnection.php');
Class WorkingExamples{
    function getUserInfo($id) {
        $Dbobj = new DbConnection(); 
        $query = mysqli_query($Dbobj->getdbconnect(), "SELECT * FROM users WHERE id = '$id'");
        return mysqli_fetch_array($query);
    }
}
$data = new WorkingExamples();
echo "<pre/>";print_r($data->getUserInfo(3));
?>

Note:- this is an example, try it by changing values according to your requirement and get the result.

Sign up to request clarification or add additional context in comments.

Comments

3
<?php

class DatabaseConnection
{
    private $host       = "127.0.0.1";
    private $dbname     = "online_english";
    private $dbUsername = "root";
    private $dbPass     = "";
    private $charset    = 'utf8mb4';
    private $dsn;

    public function tryConnect(){
        try{
            $this->dsn = "mysql:host=$this->host;dbname=$this->dbname;charset=$this->charset";
            $DBH = new PDO($this->dsn,$this->dbUsername,$this->dbPass);
            $DBH->exec("set names utf8");
            $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $DBH;
        }
        catch (PDOException $e){
            $e->getMessage();
        }
    }
}
?>

Comments

1
 <?php
class Database{
   const DB_HOSTNAME = 'localhost';
   const DB_USERNAME = 'root';
   const DB_PASSWORD = 'root';
   const DB_NAME = 'stockganesha';
   public $_db_connect;
   protected $_sql;
   protected $_result;
   protected $_row;

   function db_connect(){
     $this->_db_connect = mysqli_connect(self::DB_HOSTNAME,self::DB_USERNAME,self::DB_PASSWORD,self::DB_NAME) or die(mysql_error());
     return $this->_db_connect;
   }

   function sql(){
       $this->_sql = 'SELECT * FROM customers';
   }

   function query(){
       $this->_result = mysqli_query($this->_db_connect,$this->_sql);
   }

   function fetch_array(){
       while($this->_row = mysqli_fetch_array($this->_result)){
           $username = $this->_row['first_name'];

           echo "<ul>";
               echo "<li>".$username."</li>";
           echo "</ul>";
       }
   }

   function db_close(){
       mysqli_close($this->_db_connect);
   }
}

and Import this in another class

<?php

require_once('../Config/Dbconnection.php');
include './model.php';

class CustomerDTO{

    private $mysql;
    function __construct() {
        $database = new Database();
        $this->mysql  = $database->db_connect(); 
    }
    function create($customer){
        $firstName = $customer->getFirstName();
        $lastName = $customer->getLastName();
        $emailId = $customer->getEmailId();
        $mobileNumber = $customer->getMobileNumber();
        $dateOfBirth = $customer->getDateOfBirth();
        $phoneNumber = $customer->getPhoneNumber();
        $termAndCondtion = $customer->getTermAndCondition(); 

       $result =  mysqli_query($this->mysql, "Insert into customers (first_name,last_name,email_id,mobile_number,date_of_birth,phone_number,term_and_condition)
       values('$firstName','$lastName','$emailId','$mobileNumber','$dateOfBirth','$phoneNumber','$termAndCondtion')");
        
       return $result;
    }

    function read(){
        $result = mysqli_query( $this->mysql, "Select * from customers");
        return $result;
    }

    function update($id, $customer){
        $result = mysqli_query($this->mysql, "update customers set 
            first_name = ".$customer->getFirstName()."
            last_name = ".$customer->getLastName()."
            email_id = ".$customer->getEmailId()."
            mobile_number = ".$customer->getMobileNumber()."
            date_of_birth = ".$customer->getDateOfBirth()."
            phone_number = ".$customer->getPhoneNumber()."
            term_and_condition = ".$customer->getTermAndCondition()."
            where id = ".$customer->getId());
        
        return $result;
    }

    public function delete($id){
      $result = mysqli_query($this->mysql, "delete from customers where id =".$id);
      return $result;
    }
}

3 Comments

It is REALLY bad practise to set database connection usernames and passwords as CONSTANTs. This makes then globally available across the PHP application which is a significant security concern.
your connection values are used only once and used only a few lines further down the script so simply make them private variables. And unset them once the connection is successful.
It is just an example @Martin but thank you for your suggestion. Happy to hear you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.