使用多个php函数查询单个(mysql)数据库的正确方法
在一个PHP网站上工作时,我遇到了一个我自己无法解决的效率问题 我有两个单独的php文件:使用多个php函数查询单个(mysql)数据库的正确方法,php,mysql,database,function,mysqli,Php,Mysql,Database,Function,Mysqli,在一个PHP网站上工作时,我遇到了一个我自己无法解决的效率问题 我有两个单独的php文件: php-连接到数据库 php-执行不同sql(mysqli)查询、操作数据并返回数据的两个函数 index.php—执行sqlFunctions.php中的一些函数并使用返回值在页面中显示某些内容的文件 connection.php: ... $GLOBALS['con'] = new mysqli($servername, $username, $password, $dbname); ...
- php-连接到数据库
- php-执行不同sql(mysqli)查询、操作数据并返回数据的两个函数
- index.php—执行sqlFunctions.php中的一些函数并使用返回值在页面中显示某些内容的文件
...
$GLOBALS['con'] = new mysqli($servername, $username, $password, $dbname);
...
sqlFunctions.php:
<?php
require('connection.php');
function query1(){
global $con;
// mysqli code with $con
}
function query2(){
global $con;
// mysqli code with $con
}
?>
<?php
require('connection.php');
function query1(){
// mysqli code with $GLOBALS['con']
}
function query2(){
// mysqli code with $GLOBALS['con']
}
?>
class SqlFunctions {
protected $con;
public function __construct() {
global $con;
// can also pass $con as parameter or init db here
$this->con = $con;
}
public function query1(){
// mysqli code with $this->con
}
public function query2(){
// mysqli code with $this->con
}
}
index.php:
require('SqlFunctions.php');
$sqlFunctions = new SqlFunctions();
<?php echo $sqlFunctions->query1();?>
//简化版
require('sqlFunctions.php');
所以我在想,在每次函数调用时启动到db的新连接不是一个好主意。如果我在sqlFunctions.php中的函数中启动到db的连接,我需要向该文件中的每个函数传递另一个变量/引用/指针(你知道我的意思),这是我不想做的事情
那么,实现我所需要的最好方法是什么呢?TL;博士;:
- 主文件调用单独文件中的函数
- 该函数执行sql查询并返回数据
- 将显示返回的数据
- 在每次函数调用时不重新打开/关闭数据库连接。
- 有几种选择
备选案文1。在每个函数中声明您的数据库连接为全局
sqlFunctions.php:
<?php
require('connection.php');
function query1(){
global $con;
// mysqli code with $con
}
function query2(){
global $con;
// mysqli code with $con
}
?>
<?php
require('connection.php');
function query1(){
// mysqli code with $GLOBALS['con']
}
function query2(){
// mysqli code with $GLOBALS['con']
}
?>
class SqlFunctions {
protected $con;
public function __construct() {
global $con;
// can also pass $con as parameter or init db here
$this->con = $con;
}
public function query1(){
// mysqli code with $this->con
}
public function query2(){
// mysqli code with $this->con
}
}
sqlFunctions.php:
<?php
require('connection.php');
function query1(){
global $con;
// mysqli code with $con
}
function query2(){
global $con;
// mysqli code with $con
}
?>
<?php
require('connection.php');
function query1(){
// mysqli code with $GLOBALS['con']
}
function query2(){
// mysqli code with $GLOBALS['con']
}
?>
class SqlFunctions {
protected $con;
public function __construct() {
global $con;
// can also pass $con as parameter or init db here
$this->con = $con;
}
public function query1(){
// mysqli code with $this->con
}
public function query2(){
// mysqli code with $this->con
}
}
index.php:
require('SqlFunctions.php');
$sqlFunctions = new SqlFunctions();
<?php echo $sqlFunctions->query1();?>
require('SqlFunctions.php');
$sqlFunctions=新的sqlFunctions();
在这种情况下,还可以在类内部初始化连接,或将其作为参数传递给_construct() 值得深思的是:谢谢!选项1和2正是我想要的!另外,我该如何关闭连接?如果我编写另一个函数来关闭连接,我会按UME键,因为我会将连接作为全局变量?不客气!您可以在完成对该连接的所有调用后关闭该连接。否则,它将在脚本结束时自动关闭。除非您稍后在同一页面上打开了多个其他连接(我对此表示怀疑),否则我会让服务器为您关闭它。这是一个奇怪的答案,您设法给出了3个解决方案,实际上只提供了3个one@your-常识你能解释一下你的意思吗?哪些选项无效?为什么?globals与global完全相同。然而,对象解决方案将再次给您带来相同的问题,但现在不是使用db对象,而是使用您自己的对象。