30/09/2018, 16:53

[PHP_ERROR] Undefined variable: mysqli

Mình có đoạn code:

public static function GetDataOnePage( $START, $PAGESIZE)
{
    require_once ("./config/dbconnect.php");
    $mysqli->query("SET NAMES utf8");
    $query = "SELECT * FROM car LIMIT $START, $PAGESIZE";

    $result = $mysqli->query($query);
    $dsxe = array();
    if ($result) {
        foreach ($result as $row) {
            $xe = new carModel();
            $xe->CID = $row["CID"];
            $xe->ModelID = $row["ModelID"];
            $xe->Status = $row["Status"];
            $xe->StartDate = $row["StartDate"];
            $xe->HolderID = $row["HolderID"];
            $xe->RentalPrice = $row["RentalPrice"];
            $dsxe[] = $xe;
        }
    }

    $mysqli->close();
    return $dsxe;
}

public static function CountRow()
{
    require_once("./config/dbconnect.php");
   $mysqli->query("SET NAMES utf8");
    $query = "SELECT COUNT(*) AS N FROM car";
    
    $result = $mysqli->query($query);
    $NUMROW = $result->N;
    
    $mysqli->close();
    return $NUMROW;
}

Lúc gọi đến hàm CountRow() thì bị báo lỗi ở dòng 187: $mysqli->query(“SET NAMES utf8”);


Mong mọi người sửa giúp. Cảm ơn!

Lập Trình Sư viết 18:55 ngày 30/09/2018

$mysqli khai báo ở đâu mà gọi nó ra vô duyên thế???

Hoàng Long viết 19:00 ngày 30/09/2018

Trong file dbconfig.php, em có require trong mỗi hàm

    <?php
  $user = "root";
  $pass = "root";
  $db = "car2015";	
  $mysqli = new mysqli("localhost", $user, $pass, $db);
  if ($mysqli->connect_errno )
   {
     die( "Couldn't connect to MySQL" );
   }
?>
Lập Trình Sư viết 18:54 ngày 30/09/2018

require, include để ngay ở những dòng đầu tiên của file, ko đặt trong hàm.

Hoàng Long viết 18:55 ngày 30/09/2018

Đó là quy ước trong PHP luôn à ah. Tại em đang học UWDPT coi file demo của thầy, thầy vẫn đặt trong hàm.
Mà sửa lại thì bị lỗi khi thực hiện truy vấn: $result = $mysqli->query($query);
Nó báo là: Undefined variable: mysqli
Vẫn chưa xác định được biến mysqli. trong khi đó đã require ở trên đầu để gọi tới nó rồi mà ta (Truyền từ file config qua file car.php ở model biến mysqli )

Khoa Nguyen viết 19:07 ngày 30/09/2018

trong file dbconnect.php thêm 1 dòng ở cuối :

public $mysqli;

Tom Nguyen viết 18:54 ngày 30/09/2018

nhin nhầm sory bạn nha

Hoàng Long viết 19:00 ngày 30/09/2018

oh @thangngoc89 tại sao lại thêm public vào, mình thử thêm nó thông báo lỗi systax ngay chỗ public $mysqli; .

Hoàng Long viết 19:08 ngày 30/09/2018

Nếu mình chỉ gọi 1 hàm, ví dụ như gọi hàm public static function GetDataOnePage( $START, $PAGESIZE) thì không báo lỗi, nhưng gọi thêm 1 hàm sau đó public static function CountRow() thì báo lỗi như trên. Nó báo hàm 2 không hiểu $mysqli. Ở đây làm kết nối theo OOP:

 $mysqli = new mysqli('hostname',  'username,'password', 'dbname');
Tom Nguyen viết 18:55 ngày 30/09/2018

Mình đoán lỗi là do gọi require_once lần 2. *_once có nghĩa là chỉ load file đó 1 lần, nếu check tồn tại thì không load. nên gọi hàm CountRow sẽ không có biến mysqli.

Bạn không nên xây dựng như vậy. file config/dbconnect.php hãy viết ở dạng hàm và require_once 1 lần ở đầu file php. Sau đó chỉ cần gọi hàm getConnection() hoặc getMysqli() chẳng hạn để lấy về đối tượng mysqli.

Hoàng Long viết 18:59 ngày 30/09/2018

Cảm ơn @manhapt nhé. Bị sai chỗ require vs require_once

Khoa Nguyen viết 18:59 ngày 30/09/2018

Sorry mình nhầm. Lâu rồi nên quên. Cái đó phải là global $mysqli . bạn phải đem biến vào func thì mới gọi được.

Bài liên quan
0