我该如何制作这个“;数据库连接”;代码运行效率更高


How do I make this "database connection" code more efficient to run?

我有这个代码:

 function Perubahan($a = '`Ubah`') {
        $con = mysqli_connect("localhost", "root", "", "nofriani"); //koneksi ke database
        $syntax = 'SELECT' . $a . ' FROM `table 1` WHERE `No`= 6';
        $naik = mysqli_query($con, $syntax);
        while ($row = mysqli_fetch_array($naik)) {
            echo round($row[0], 3);
        }
    }
    function Jenis($b = 1) {
        $con = mysqli_connect("localhost", "root", "", "nofriani"); //koneksi ke database
        $syntax = 'SELECT `Jenis` FROM `table 1` WHERE `No`= ' . $b;
        $naik = mysqli_query($con, $syntax);
        while ($row = mysqli_fetch_array($naik)) {
            echo $row[0];
        }
    }
    function Andil($b = 1) {
        $con = mysqli_connect("localhost", "root", "", "nofriani"); //koneksi ke database
        $syntax = 'SELECT `Andil` FROM `table 1` WHERE `No`= ' . $b;
        $naik = mysqli_query($con, $syntax);
        while ($row = mysqli_fetch_array($naik)) {
            echo round($row[0], 3);
        }
    }
    function Kelompok($b = 1) {
        $con = mysqli_connect("localhost", "root", "", "nofriani"); //koneksi ke database
        $syntax = 'SELECT `Andil` FROM `table 1` WHERE `No`= ' . $b;
        $naik = mysqli_query($con, $syntax);
        while ($row = mysqli_fetch_array($naik)) {
            echo round($row[0], 3);
        }
    }

所以我调用每个函数(仍然在同一个PHP文件中)。但当我开始运行它时,花了太长时间才显示结果(但它起了作用)。我猜问题是因为我在每个函数中重复数据库连接。如何避免连接到同一个数据库?

我试图创建到不同文件的数据库连接,并在每个函数中调用该文件,但没有成功。我还尝试将$con变量传递到函数中(在每个函数中执行global $con),但这也没有使它运行得更快。

那么我是不是错过了什么?

您可以使用一个类:

class NameService
{
    private $con = null;
    public function __construct()
    {
        $this->con = new mysqli("localhost", "root", "", "nofriani");
        if ($this->con->connect_error) {
            die('Connect Error (' . $this->con->connect_errno . ') '
             . $this->con->connect_error);
        }
    }
    public function __destruct()
    {
        $this->con->close();
    }
    function Andil($b = 1) {
        $syntax = 'SELECT `Andil` FROM `table 1` WHERE `No`= ' . $b;
        $result= $this->con->query($syntax);
        while ($row = $result->fetch_array()) {
            echo round($row[0], 3);
        }
    }
    ...
}

并使用它:

$nameService = new NameService();
$nameService->Andil(23);

编辑:现在是OOP风格的

如果您可以使用Classes,那么您可以为类创建全局变量,保持与数据库的连接,那么每个函数都将使用相同的连接,并且不会重新连接。

使用准备好的语句,因为现在你的代码很容易被破解。

函数JenisAndilKelompok的作用与为核心重用准备的Perubahan完全相同,因此只需将其重命名为getData($select = '*')并只使用一个函数即可。

根据DRY的规则,您最好提取这部分代码:

mysqli_connect("localhost", "root", "", "nofriani"); //koneksi ke database

并放在一个地方(一个类或一个函数),所有其他代码都可以访问它。例如,你可以有这样的功能:

function getConnection()
{
return mysqli_connect("localhost", "root", "", "nofriani"); //koneksi ke database
}

然后你可以做这样的事情:

function Jenis($b = 1) {
        $con = getConnection();
        $syntax = 'SELECT `Jenis` FROM `table 1` WHERE `No`= ' . $b;
        $naik = mysqli_query($con, $syntax);
        while ($row = mysqli_fetch_array($naik)) {
            echo $row[0];
        }
    }

这样,如果您的ConnectionString发生了更改,您应该更改一个位置,所有其他功能都可以像以前一样工作。(顺便说一句,最好不要硬编码ConnectionString