我有这个代码:
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,那么您可以为类创建全局变量,保持与数据库的连接,那么每个函数都将使用相同的连接,并且不会重新连接。
使用准备好的语句,因为现在你的代码很容易被破解。
函数Jenis
、Andil
和Kelompok
的作用与为核心重用准备的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
)