Nasıl bu mysqli veritabanı sınıf çalışma alabilirim?

2 Cevap php

Ben doğru kovalamak keserim. Ben bu sınıf ile bu noktada elde edebilirsiniz tüm veritabanı bağlantısıdır. Ben bir sorgu yapmak mümkün duyuyorum. Eğer tam olarak nasıl bu çalışma almak ve / veya nasıl daha iyi bir şekilde kodlamak için bana göstermek için bana gösterebilir.

<?php
class database{

public $dbHost = '';
public $dbUser = '';
public $dbPass = '';
public $dbName = '';

public $db;

public function __construct(){}

public function dbConnect(){
    $mysqli = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);

    /* check connection */
    if (mysqli_connect_errno()){
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }else{
        echo 'connection made';
    }
    /* close connection */
    $mysqli->close();
}

public function query($sql){
    $query = $sql;
    self::preparedStatement($query);
}

public function preparedStatement(){
    if ($stmt = $mysqli->prepare($query)){

        /* execute statement */
        $stmt->execute();

        /* bind result variables */
        $stmt->bind_result($name, $code);

        /* fetch values */
        while ($stmt->fetch()) {
            printf ("%s (%s)\n", $name, $code);
        }

        /* close statement */
        $stmt->close();
    }
}

public function __destruct(){}

}
?>

2 Cevap

Bu benim için çalıştı. Ben değişiklikleri yorumladı ettik.

<?php
class database{

public $dbHost = '';
public $dbUser = '';
public $dbPass = '';
public $dbName = '';

public $db;

public function __construct(){}

public function dbConnect(){
    ### not $mysqli
    $this->db = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);

    /* check connection */
    if (mysqli_connect_errno()){
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }else{
        echo 'connection made';
    }
    /* close connection */
    ### $this->db->close(); // DO NOT close the connection here!
}

public function query($sql){
    $query = $sql;
    self::preparedStatement($query);
}

public function preparedStatement($query){ ### parameter $query added

    if ($stmt = $this->db->prepare($query)){ ### not $mysqli->prepare()

        /* execute statement */
        $stmt->execute();

        /* bind result variables */
        $stmt->bind_result($name, $code);

        /* fetch values */
        while ($stmt->fetch()) {
            printf ("%s (%s)\n", $name, $code);
        }

        /* close statement */
        $stmt->close();
    }
}

public function __destruct(){}

}


### Test code
/*
$db = new Database();
$db->dbHost = '127.0.0.1';
$db->dbUser = 'root';
$db->dbPass = 'root';
$db->dbName = 'test';
$db->dbConnect();
$db->query('SELECT * FROM test');
*/
?>

Eğer bir parametre ihmal var:

public function preparedStatement($query)

(Ve bu yöntem aslında should statik)

Bir dahaki sefere istemeden önce kod hata ayıklama deneyin. Hatta basit echo ifadeleri burada yapardı.

EDIT: ve hatta bu iş olmaz. Seni değişken kapsamı kavramını yanlış düşünüyorum. Sadece yerel bir değişken olarak __construct() bunu ayarlamak eğer preparedStatement() için devam etmem çünkü $mysqli, bu sınıfın bir örneği değişken olmalıdır.