简体   繁体   中英

Trying to display from mySQL using a class in php

I'm beginning php/MySql and have been asked to use a class to access my database. I can get the display to work when I have all my code in one file but when I try to call the class from another file, I get nothing.

This is the one that works:

<?php

$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'testdb';

$myNewConnection = mysqli_connect($host,$username,$password,$dbname);
$query = "SELECT user_name FROM users" or die ("Error..." . mysqli_error($myNewConnection));

// execute the query
$result = $myNewConnection->query($query);

// display output
while($row = mysqli_fetch_array($result)) {
    echo $row["user_name"] . "<br>";
}

?>

This is my code to call the class:

<?php
include("users.php");

$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'testdb';

//initiate the class
$myDB = new MyDB('localhost', 'root', '', 'testdb'); 
//$myDB = new MyDB($host,$username,$password,$dbname); 
?>

This is my class:

<?php

class MyDB {

    public $query;
    public $myConnection;

    public function _construct($host,$username,$password,$dbname){

        // establish the connection
        $this->myConnection = mysqli_connect($host,$username,$password,$dbname);
    }
    public function list_users() {

        // create query to list all users
        $this->query = "SELECT user_name FROM users" or die ("Error..." . mysqli_error($this->$myNewConnection));

        // execute the query
        $result = $this->$myConnection->query($this->$query);

        // display output
        while($row = mysqli_fetch_array($result)) {
            echo $row["user_name"] . "<br>";
        }
    }

}

?>

Any help appreciated

Change this line as below (remove the dollar sign from query and myConnection ):

$result = $this->myConnection->query($this->query);

Plus you might need to call your list_users function using the code below (right after instantiating your class! Pass your defined variables to constructor instead of their actual values):

$myDB = new MyDB($host,$username,$password,$dbname);
$myDB->list_users();

Also constructors are written with two underscores like this:

public function __construct

function __construct with two " _ ". Delete all " $ " after " -> ":

<?php

class MyDB {
    public $query;
    public $myConnection;
    public function __construct($host,$username,$password,$dbname){     
        $this->myConnection = mysqli_connect($host,$username,$password,$dbname);
    }
    public function list_users() {
        $this->query = "SELECT user_name FROM users";
        if($result = $this->myConnection->query($this->query)) {
            while($row = mysqli_fetch_array($result)) {
                echo $row["user_name"] . "<br>";
            }
        }
    }
}

And you have to run list_users() :

<?php
include("users.php");

$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'testdb';

$myDB = new MyDB($host, $username, $password, $dbname); 
$myDB->list_users();

?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM