Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

परिणाम प्राप्त करने का प्रयास करते समय PHP क्लास के साथ डीबी से कनेक्ट करें काम नहीं कर रहा है

Comando::Executar . के रूप में स्थिर नहीं है, बल्कि public function... . के रूप में घोषित किया गया है , आपको कुछ ऐसा करना होगा जैसे:

$comando = new Comando();

$queryMesasAtivas = $comando->Executar('SELECT * FROM mesas WHERE status =1 AND numero !="'.$_SESSION["mesa"].'"');

if ($queryMesasAtivas->num_rows > 0) {

    while ($rowMesasAtivas = $queryMesasAtivas->fetch_assoc()) {
        echo "<option value='".$rowMesasAtivas['numero']."'>Mesa ".$rowMesasAtivas['numero']."</option>";
    }
}
else {
    echo '<option>Nenhuma mesa ativa</option>';
}

या विधि को स्थिर घोषित करें, अर्थात्:

public static function Executar($sql)
{
    $con = new Conexao();
    $con->Abrir();
    $re = $con->mysqli->query($sql);
    $con->Fechar();
    return $re;
}

और फिर आप डबल कोलन का उपयोग कर सकते हैं (:: ) वाक्य रचना:

$queryMesasAtivas = Comando::Executar('SELECT * FROM mesas WHERE status =1 AND numero !="'.$_SESSION["mesa"].'"');

मेरा सुझाव है कि नहीं हर बार जब आप कोई क्वेरी चलाते हैं तो एक खुले और बंद को कॉल करना, बल्कि इस तरह की एक कक्षा को कॉल करना:

class Conexao
{
    private $link;

    public function __construct($host = null, $username = null, $password = null, $dbName = null)
    {
        $this->link = mysqli_init();
        $this->link->real_connect($host, $username, $password, $dbName) or die("Failed to connect");
    }

    public function __destruct()
    {
        $this->link->close();
    }

    public function Query($sql)
    {
        return $this->link->query($sql);
    }
}

इसके बाद इसका उपयोग इस प्रकार किया जाता है:

$conexao = new Conexao("host", "username", "password", "db_name");
$result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;");

यह न केवल छोटा है, बल्कि सर्वर पर अधिक हल्का है क्योंकि आप डेटाबेस कनेक्शन को स्थायी रूप से खोल और बंद नहीं कर रहे हैं, CPU उपयोग और मेमोरी उपयोग को कम कर रहे हैं।

मेजबान आदि के लिए स्थिर गुणों का उपयोग करना (उन्हें __destruct . के बाद भी स्मृति में रखता है का उपयोग किया जाता है, इसलिए आपको उन्हें हर बार पुनः घोषित करने की आवश्यकता नहीं है):

class Conexao
{
    private $link;
    private static $host, $username, $password, $dbName;

    public function __construct($host = null, $username = null, $password = null, $dbName = null)
    {
        static::$host = $host ? $host : static::$host;
        static::$username = $username ? $username : static::$username;
        static::$password = $password ? $password : sattic::$password;
        static::$dbName = $dbName : $dbName : static::$dbName;
        $this->link = mysqli_init();
        $this->link->real_connect(static::$host, static::$username, static::$password, static::$dbName) or die("Failed to connect");
    }

    public function __destruct()
    {
        $this->link->close();
    }

    public function Query($sql)
    {
        return $this->link->query($sql);
    }
}

$conexao = new Conexao("host", "username", "password", "db_name");
$result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;");

$conexao->__destruct(); // Destroy the class
$conexao = new Conexao(); // Reinitialise it
$result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;");

कनेक्शन क्लास के कॉन्फिग इंस्टेंस का उपयोग करना:

config.php फ़ाइल:

<?php

require_once 'path/to/Conexao.php';
$conexao = new Conexao("host", "username", "password", "db_name");

?>

index.php फ़ाइल:

<?php

require_once 'config.php';
$result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;");

?>

कक्षा में अब my github पर अभिभावक हैं। !




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP/MySQL क्रिटिकल सेक्शन

  2. विभिन्न डेटाबेस से तालिकाओं में शामिल होना

  3. एक डेटाबेस से क्रोनजॉब पढ़ना और दूसरे को लिखना

  4. Zend DB कैसे डेटाबेस कनेक्शन प्रबंधित करता है

  5. एक php/mysql वेब एप्लिकेशन में निराशावादी लॉकिंग कैसे कार्यान्वित करें?