Я хочу получить данные из базы данных с помощью MySQLi.

Код от class.php

class main{
    public $host="localhost";
    public $username="root";
    public $password="";
    public $db_name= "db_tvw";
    private $img_path    = 'slider_img_upload/';

    public function __construct(){
        $this->run= new mysqli($this->host, $this->username, $this->password, $this->db_name);
        if (mysqli_connect_errno()){
            echo "database connection is fail";
            exit;
        }
    }

    public function select_data_from_db($table_name ,$run){
        $stmt=$run->prepare("SELECT * FROM ".$table_name); 
        $stmt->execute();
        $result = $stmt->get_result();
        $total_count=$result->num_rows;
        $result= array();
        if($total_count>0){
            while ($row = mysqli_fetch_array($query)) {
                $result[] = $row;
            }
        }
        return $result;
    }

Код от index.php

<?php $myrow=$obj->select_data_from_db("home_slider",$run); ?>
<tr>
    <td><?php echo  $myrow['id']; ?> </td>
    <td><?php echo  $myrow['title']; ?> </td>
    <td><?php echo  $myrow['description']; ?> </td>
</tr>

Ошибка, которую я получаю:

Notice: Undefined variable: run in 
D:\Xampp\htdocs\admin\slider_fetch_data.php on line 24.

Fatal error: Call to a member function prepare() on null in 
D:\Xampp\htdocs\admin\config.php on line 116.
1
kulu 23 Июн 2017 в 09:42
Где вы создаете объект класса main? покажите этот код.
 – 
Dileep Kumar
23 Июн 2017 в 09:46
В class.php в конце файла здесь я создаю объект, код основного класса находится здесь: общедоступная функция url ($ url) {header ("location:". $ Url); }} $ obj = new main;
 – 
kulu
23 Июн 2017 в 09:49
Что касается стиля - имена классов обычно начинаются с заглавной буквы, поэтому предпочтительнее использовать Main. Кроме того, $ run является переменной экземпляра, поэтому на нее следует ссылаться с помощью this, в данном случае: $stmt=$this->run->prepare("SELECT * FROM ".$table_name);
 – 
Nigel Ren
23 Июн 2017 в 10:26
Думаю, неважно, какие строчные и заглавные буквы в названии класса, вы можете дать мне какое-нибудь другое решение.
 – 
kulu
23 Июн 2017 в 10:39
Теперь я получаю эту ошибку: Предупреждение: mysqli_fetch_assoc () ожидает, что параметр 1 будет mysqli_result, объект, указанный в D: \ Xampp \ htdocs \ admin \ config.php в строке 122, мои другие ошибки завершены
 – 
kulu
23 Июн 2017 в 10:41

2 ответа

Поскольку на вашем class.php вы инициализировали запуск с помощью этого кода

$this->run= new mysqli($this->host, $this->username, $this->password, $this->db_name);

Я думаю тебе не нужно

public function select_data_from_db($table_name ,$run){}

Удалить второй параметр


Это должно быть это

public function select_data_from_db($table_name){}

Это правильный код (если я не ошибаюсь и mysqli работает)

На class.php

class main{
    public $host="localhost";
    public $username="root";
    public $password="";
    public $db_name= "db_tvw";
    private $img_path    = 'slider_img_upload/';

    public function __construct(){
        $this->run= new mysqli($this->host, $this->username, $this->password, $this->db_name);
        if (mysqli_connect_errno()){
            echo "database connection is fail";
            exit;
        }
    }

    public function select_data_from_db($table_name){
        $stmt=$this->run->prepare("SELECT * FROM ".$table_name); 
        $stmt->execute();
        $result = $stmt->get_result();
        $total_count=$result->num_rows;
        $result= array();
        if($total_count>0){
            while ($row = mysqli_fetch_array($query)) {
                $result[] = $row;
            }
        }
        return $result;
    }
...

На index.php

<?php $myrow=$obj->select_data_from_db("home_slider"); ?>
<tr>
    <td><?php echo  $myrow['id']; ?> </td>
    <td><?php echo  $myrow['title']; ?> </td>
    <td><?php echo  $myrow['description']; ?> </td>
</tr>
0
Josua Marcel Chrisano 24 Июн 2017 в 07:50
<?php
    $myrow = new main();
    $myrow=$obj->select_data_from_db("home_slider",$myrow->run);
?>
<tr>
    <td><?php echo  $myrow['id']; ?> </td>
    <td><?php echo  $myrow['title']; ?> </td>
    <td><?php echo  $myrow['description']; ?> </td>
</tr>

Можешь попробовать

0
Josua Marcel Chrisano 28 Июн 2017 в 07:09
Привет, попробовав этот код, я получаю следующие ошибки: Примечание: неопределенная переменная: запрос в D: \ Xampp \ htdocs \ admin \ config.php в строке 122 Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, null, указанным в D: \ Xampp \ htdocs \ admin \ config.php в строке 122 Примечание: Неопределенный индекс: id в D: \ Xampp \ htdocs \ admin \ slider_fetch_data.php в строке 29
 – 
kulu
23 Июн 2017 в 09:54
Можете ли вы поделиться со мной своим идентификатором linkedin, чтобы обсудить этот вопрос.
 – 
kulu
23 Июн 2017 в 09:56
Вы получаете ошибки, потому что запрос возвращает null. В функции select_data_from_db вы меняете: while ($ row = mysqli_fetch_array ($ result)) {$ result [] = $ row; }}
 – 
Trần Hà Nguyễn
23 Июн 2017 в 10:09
Да, большое спасибо, я пробую этот код, теперь получаю эту ошибку: Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, объект, указанный в D: \ Xampp \ htdocs \ admin \ config.php в строке 122
 – 
kulu
23 Июн 2017 в 10:13
Не уверен, но я думаю, что функция select_data_from_db должна измениться на: public function select_data_from_db($table_name, $run) { $stmt = $run->prepare("SELECT * FROM " . $table_name); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_assoc(); }
 – 
Trần Hà Nguyễn
23 Июн 2017 в 10:25