PHP 类 - 如何仅连接一次数据库

2023-12-04

我尝试做一个简单的 SQL 类。 只有一个问题:

function __classDBREAD($table, $where, $value, $back)
{
    $link = mysql_connect('127.0.0.1','XXXX','XXXXXX');
    mysql_select_db('XXXX', $link);
    mysql_set_charset('utf8');

    $sql = "SELECT * FROM $table WHERE $where = '$value' LIMIT 1";
    $result = mysql_query($sql, $link) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    return $row[$back];
    mysql_close($link);
}

现在,如何只连接一次SQL并添加“db Update”、“db Insert”和“bRead”等功能,而不需要每次都连接到数据库?

Teamspeak 连接也是如此。

这里有一个例子:

require_once                      ("lib/TeamSpeak3/TeamSpeak3.php");
    $ts3_VirtualServer              = TeamSpeak3::factory("serverquery://XXXXX:[email protected]:10011/?server_port=XXXX");
    $__varTeamspeakClients          = $ts3_VirtualServer->clientList();
    $__intTeamspeakClientsOnline    = $ts3_VirtualServer["virtualserver_clientsonline"] - 1;
    $ts3_VirtualServer->request('clientupdate client_nickname='.$this->__classRndString(8));

一样的问题。当我将类包含到页面时,如何仅定义一次连接?


既然每个人都把他们的 OOP 扔进了擂台(注:我要做PDO,因为我更了解它,但原理是一样的,只是替换连接):

<?php
class DatabaseConnection
    {
        # Create a singleton to store the connection for reuse
        private static $singleton,
                       $con;
        # save connection to singleton and return itself (the full object)
        public function __construct()
           {
                # If your singleton is not set
                if(!isset(self::$singleton))
                    # assign it this class
                    self::$singleton = $this;
                # return this class
                return self::$singleton;
           }
        # This is a connection method because your __construct
        # is not able to return the $pdo connection
        public function connection($host='hostname',$username='username',$password='password',$database='database')
            {
                # In the connection, you can assign the PDO to a static
                # variable to send it back if it's already set
                if(self::$con instanceof \PDO)
                    return self::$con;
                # If not already a PDO connection, try and make one
                try {
                        # PDO settings you can apply at connection time
                        $opts = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_EMULATE_PREPARES => false);
                        # Assign your PDO Conneciton here.
                        self::$con =  new PDO("mysql:host={$host};dbname={$database}",$username,$password,$opts);
                        # Return the connection
                        return self::$con;
                    }
                catch (PDOException $e){
                        exit('Database error');
                    }   
            }
    }

您可以在任何地方使用它,无论是在您的函数、类之内还是之外。它每次都会返回相同的连接。如果你使用spl_autoload_register()使用自动加载功能,您将一切就绪,甚至不必显式使用require_once()每次!

<?php
require_once('class.DatabaseConnection.php');
// Instantiate connection class
$pdo = new DatabaseConnection();
// Assign the connection to $con (or whatever variable you like)
$con = $pdo->connection();

需要注意的是,singleton通常很少使用模式。通常最好使用new Objects()而不分配它singleton。我个人喜欢singleton然而对于这个用途。



简单演示 - 考虑以下场景:

<?php
// Here is an example of the singlton with an echo
// which shows that the class is returning itself
// like a global
class DatabaseConnection
    {
        private static $singleton;
        public function __construct()
           {
                // If your singleton is not set
                if(!isset(self::$singleton)) {
                        echo 'NEW Object'.PHP_EOL;
                        // assign it this class
                        self::$singleton = $this;
                    }
                else
                    echo 'SAME Object'.PHP_EOL;
                // return this class
                return self::$singleton;
           }
    }

function ReturnConnection()
    {
        return new DatabaseConnection();
    }

class TestClass
    {
        public  function __construct()
            {
                new DatabaseConnection();
            }
    }

function query($sql=false)
    {
        return ReturnConnection();
    }

// The connection class wrapped in a function 
$a = ReturnConnection();
// The function nested inside a class
$b = new TestClass();
// The function nested inside another function
$c = query();

上述用途singleton将产生:

NEW Object
SAME Object
SAME Object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 类 - 如何仅连接一次数据库 的相关文章

随机推荐

  • 按列快速串联数千个文件

    我在用R使用以下命令绑定约 11000 个文件 dat lt do call bind cols lapply lfiles read delim 这慢得令人难以置信 我使用 R 是因为我的下游处理 例如创建绘图等 是在 R 中进行的 按列
  • WCF VS.旧版 ASP.Net Web 服务 [重复]

    这个问题在这里已经有答案了 可能的重复 Web 服务 WCF 与标准 谁能给我推荐一些文档来描述为什么 WCF 比旧版 ASP NET Web 服务更好 我对性能和安全性特别感兴趣 WCF 更加灵活 可以通过 HTTP 使用 如旧版 ASM
  • TypeError:“int”类型的对象没有 len() 需要错误帮助[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在为我的代码编写一段代码 当用户输入 7 位数字时 它会将这些数字分别乘以 3 和 1 这是代码 当它检查用户是否输入了 7 位数字时 出现以下错误 类型错误 int 类型的对象没有
  • 使用 Bouncy Castle c# 创建 CRL 文件

    我已经使用 Bouncy Castle 构建了自己的根 CA 证书 并使用它来构建其他证书 我想使用 Bouncy Castle C 构建一个证书吊销列表 CRL 以包含已吊销的证书列表 例子 Retrieve CA root certif
  • 多项式函数的 LinEst vba

    我正在尝试使用 vba 计算多项式回归 首先 我尝试了 y x 2 b OUTPUT WorksheetFunction Application LinEst A Application Power C 2 True True 其中 A 和
  • 显示:弯曲和图像大小调整/居中

    我在用display flex 使图像居中并max width max height来调整它的大小 其中有几张图像 有些宽 有些高 有些正方形 我想确保它们的尺寸都足够大以供查看 例如 我假设如果图像达到最大宽度而不是高度 则它应该与宽度保
  • 减少()有什么问题?

    关于Python 3 0中reduce 函数的变化以及如何删除它 网上似乎有很多激烈的讨论 我有点难以理解为什么会出现这种情况 我发现在各种情况下使用它是相当合理的 如果这种蔑视只是主观的 我无法想象会有这么多人关心它 我缺少什么 减少 有
  • 使用 ggsave 将系统时间和日期添加到 pdf

    我有一个 pdf 文件 我试图打印该 pdf 文件名称上的时间和日期 我尝试使用很多不同的方法 但仍然一无所获 你能帮我吗 打印为pdf的代码如下 ggsave Title of file pdf marrangeGrob grobs pl
  • 加载、保存然后再次加载图像会抛出“GDI+ 中发生一般错误”

    This 似乎犯了臭名昭著的错误 我记得不久前得到了不同的代码 但是它回来了 复仇 但有一些我似乎无法弄清楚的新代码 绝对是generic 一定 The Goal 我正在尝试构建一个表单 允许用户 选择一个图像 按 保存 关闭表单 然后将图
  • Android Studio导入facebook库奥德赛

    我正在尝试通过 Android Studio 中的 Facebook 库在我的应用程序中使用 Facebook 登录 在学习了 9 个关于如何在 Android Studio 0 6 1 上导入该库的教程之后 在单击 清理项目 之前一切都很
  • 使用 ColdFusion 的 SAML 服务提供商

    我正在尝试使用 ColdFusion 9 对 SAML 2 0 进行测试 我想要的只是使用 SAML 生成的 xml 并进行处理 我正在关注这里给出的文章http blog tagworldwide com p 19 存档版本 但是当我启动
  • WordPress 全局 $post 变量为空

    我正在开发一个 WordPress 插件 管理背景图像 当我尝试使用 global post print r post 该对象是空的 可能有一些必需的数据 我不知道是什么 如果您知道请帮助我 WordPress 全局变量 post包含当前的
  • 如何优雅地终止一个进程?

    我想终止多个进程 但我想让每个进程都有机会保存其数据 询问用户有关保存文件的信息 甚至忽略关闭请求 So TerminateProcess这是不可能的 因为它会立即终止进程 另一种方法是使用SendMessage PostMessage发送
  • case 类私有构造函数 - 需要 readResolve 实现

    我只是在谷歌上搜索如何使用私有构造函数创建案例类 以下是执行此操作的正确方法 如中所述 如何在案例类同伴中覆盖 apply object A def apply s String i Int A new A s toUpperCase i
  • 创建列表视图并从 flutter 上的 firestore 获取数据

    我有一个应用程序 我需要将这些数据从 firestore 数据库一一获取到 flutter 上的 Listview 我尝试了很多东西 例如流构建器和未来构建器 但我无法得到 因为我的数据库使用嵌套数据如果您有任何建议 请告诉我 非常感谢 有
  • 需要 preg_match_all 链接

    我有一个像这样的字符串 string some text http dvz local index index regionId 28 http stuff kiev ua roadmap page php http 192 168 3 1
  • 如何使用查询生成器在 Symfony 4 中连接外部 ID 上的多个实体?

    我正在努力学习 Symfony 今天我正在关注关联教程 我决定制作一个小应用程序 包括房屋 厨房 卧室和橱柜 我 尝试 使用draw io制作一个小的类图 以便为您提供更好的想法 所以基本上一栋房子可以有多个卧室和多个厨房 每个厨房可以有多
  • Javascript - 为什么从函数返回 array.push(x) 不会将元素 x 推入数组?

    我想知道为什么以下功能有效 function foo list var array array push list return array gt foo 1 2 3 1 2 3 而这个则没有 function foo list var a
  • Python 和 .Net 集成选项

    我想将 Python 与 C 集成 我发现两种方法使用进程间通信和 IronPython 进程间通信需要在所有客户端计算机上安装 Python exe 因此这不是一个可行的解决方案 我们开始使用 IronPython 但它目前仅支持 2 7
  • PHP 类 - 如何仅连接一次数据库

    我尝试做一个简单的 SQL 类 只有一个问题 function classDBREAD table where value back link mysql connect 127 0 0 1 XXXX XXXXXX mysql select