在 php 中制作 mysql 单例数据库类有更简单/更好的方法吗?

2024-01-20

这是我正在使用的:

<?php
final class Database {
    private static $oDb;
    public static function init() {
        if(self::$oDb == NULL)
        {
            self::$oDb = mysql_connect('localhost', 'mysql_user', 'mysql_password') or die(mysql_error());
            mysql_select_db('mysql_db_name', self::$oDb) or die (mysql_error());;
        }
        return self::$oDb;
    }
    public function query($sql)
    {
        return mysql_query($sql) or die(mysql_error());
    }
}
?>

Usage:

$oDb = Database::init();
$sql = foo;
$oDb->query($sql);

假设我只希望它连接并执行这个查询函数,我应该对该类进行任何改进吗?内存还是代码效率?

另外,有没有一种有效的方法可以从配置文件中获取数据库凭据?我知道我不能在我的班级中使用包含。


我通常在这种情况下使用延迟初始化,并且只有一个公共方法(在本例中),并使用私有构造函数来防止外部实例化(根据单例模式):

class Database {
  private static $instance;
  private $conn;

  private function Database() {
    // do init stuff
    require_once('dbconfig.php'); // contains define('DB_USER', 'webuser'); etc...
    $this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS); // do error checking
  }

  public static function getInstance() {
    if(!self::$instance) {
      self::$instance = new Database();
    }
    return self::$instance;
  }

  public static function query($sql) {
    $instance = self::getInstance();
    return mysql_query($sql, $instance->conn);
  }
}

然后你就可以打电话$dbHandle = Database::getInstance()任何时候你需要使用它。或者在这种情况下,由于定义了静态查询方法,您可以使用Database::query("select * from xx;");根本不需要调用任何类型的 init。

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

在 php 中制作 mysql 单例数据库类有更简单/更好的方法吗? 的相关文章

  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • 是否可以将路由参数传递给 Laravel 中的控制器构造函数?

    是否可以将路由参数 或路由段 注入到控制器构造函数中 您找到一些代码来澄清我的问题 class TestController protected param public function construct paramFromRoute
  • 如何使用 PHP 构建正确的 SOAP 请求

    我需要格式化 构建此 SOAP 服务 的请求 http api notificationmessaging com NMSOAP NotificationService wsdl http api notificationmessaging
  • 多次重定义错误

    在了解了有关类和指针的更多信息后 我重构了一个程序并删除了超过 200 行代码 在此过程中创建了另外两个类 Location and Piece 问题是 在编译完所有内容后 链接器抱怨构造函数Piece被定义了多次 有很多错误 In fun
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • 如何在 JavaScript 中创建服务器端进度指示器?

    我想在我的网站中创建一个部分 用户可以在其中进行一些简单的操作update纽扣 这些中的每一个update按钮将发送到服务器 并在幕后进行长时间的处理 当服务器处理数据时 我希望用户有某种进度指示器 例如进度条或文本百分比 我使用 jQue
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 使用值填充的 Symfony2 自定义字段类型

    这是先前问题的后续问题Symfony2 自定义表单类型或扩展 https stackoverflow com questions 24079288 symfony2 custom form type or extension 我正在尝试为订
  • docker 中的 php Curl 冲突 CURLOPT_FILE 和 CURLOPT_RETURNTRANSFER

    当我使用curl时CURLOPT FILE and CURLOPT RETURNTRANSFER选项 文件为空 没有任何curl错误 fp fopen saveTo w ch curl init fileUrl curl setopt ch
  • 使用 XPATH(和 PHP)从样式属性中选择背景 url

    我只想从此背景图像样式属性中选择 url 这可以通过 XPATH 实现吗 a href http www test com style background image none test a 我有类似的东西 url xpath gt qu
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa

随机推荐

  • 从另一个进程访问 mmap 内存

    我开始玩 mmap 了 我正在尝试创建一个示例工作区 然后将其扩展到实际案例 这就是我想要实现的目标 流程1 mmap一个文件 实际上是一个设备 但是用文本文件生成一个例子是可以的 进程2 不是从进程1复制而来 只是一个独立的进程 读取进程
  • 在Python中编辑文本文件中的特定行

    假设我有一个文本文件 其中包含 Dan Warrior 500 1 0 有没有办法可以编辑该文本文件中的特定行 现在我有这个 usr bin env python import io myfile open stats txt r dan
  • 重复的 ID。日本科学基金会

    我的 JSF 有问题 谁能说为什么这不起作用
  • 在 matlab GUI 中创建选项卡

    如何在 matlab gui 中创建选项卡 我不久前做了这样的事情 我的意思是我在 GUI 顶部创建了一些菜单 然后按每个菜单将设置某些控件的可见属性 而其他控件则关闭 这种方式对于小型 GUI 很有用 但在 beag GUI 中会遇到问题
  • raku 语法的标记不会命中文档的第一次出现,但会命中类似的后续出现

    我想处理希伯来语的整个 Tanach 文件 为此 我选择了 Raku 语言 因为它的一些功能 语法和 unicode 支持 因此 我定义了一些标记来选择相关数据 grammar HEB token TOP
  • 如何使用 autoStartup=false 启动 Camel 路线

    我想使用以下命令来控制我的路线何时启动RoutePolicy 因此 我将其定义为autoStartup false
  • 在 Theano 中循环(或向量化)可变长度矩阵

    我有一个矩阵列表L 其中每个项目M is a x n矩阵 x是一个变量 n是一个常数 我想计算总和M M对于所有项目L M 是转置M 如以下 Python 代码所示 for M in L res np dot M T M 实际上我想在The
  • Levenshtein 距离算法比 O(n*m) 更好?

    我一直在寻找一种先进的编辑距离算法 并且迄今为止我发现的最好的 http www levenshtein net 是 O n m 其中 n 和 m 是两个字符串的长度 该算法之所以达到如此规模 是因为空间而不是时间 因为创建了两个字符串的矩
  • 如何使用 CSS 居中和裁剪图像以使其始终显示为正方形?

    我需要始终仅使用 CSS 将随机大小的图像裁剪为 160x160 的正方形 裁剪时图像应保持居中 我的标记应该是 a href class cropper img src image alt description a 在 StackOve
  • 告诉我如何在没有javascript的情况下进行半液体布局,我觉得我错过了一些简单的东西

    好的 首先我将支持 IE7 所以盒子大小已经过时了 我有一个固定大小的页眉和页脚 例如每个 80 像素 分别位于窗口的顶部和底部 我想要一个 div 占据其之间的所有空间 无论窗口大小如何 使用 JavaScript 很轻松 但是有没有办法
  • 正则表达式允许 A-Z、- 和 '

    我试图让这个正则表达式起作用来验证名称字段仅允许 A Z 和 到目前为止 我正在使用它 除了不允许使用撇号之外 它工作得很好 if preg match a zA Z firstname do something 我希望它只允许 A Z 破
  • 在 python 中重新打开声音文件时出错

    我正在制作一个程序 它可以简单地重复您输入的任何文本 并且在我第一次测试它时似乎可以正常工作 问题是 当我第二次尝试输入任何内容时 它崩溃并说我录制的声音文件的权限被拒绝 我相信这是因为文件已经打开 但我仍然不知道如何修复它 我正在使用 g
  • PageSpeed 和 CDN 图像

    我目前有一个网站 通过 AWS Cloudfront 为位于 AWS S3 上的图像提供服务 我不想安装 PageSpeed 而是想利用 PageSpeed 提供的图像优化和延迟加载 页面视图之外 我的问题是 我是否需要使用 PageSpe
  • 如何用 Java 解析 1 或 2 位数的小时字符串?

    我的解析器可能会遇到 2 37PM 由 H mma 解析 或 02 37PM 由 hh mma 解析 如何在不使用 try catch 的情况下解析两者 当我出错时 我会收到这样的错误 发现冲突 AmPmOfDay 0 字段与派生的 AmP
  • 尝试在 .Net Core 应用程序中使用 Thread_UseAllCpuGroups

    我正在尝试在我的 Net Core 应用程序中使用 Thread UseAllCpuGroups 将框架与 Web Config 中的设置结合使用时 我在 3990x 处理器上使用所有 128 个 CPU 时没有任何问题 但在将其转移到 N
  • 当 --coverage-html 时 Phpunit 非常慢

    我正在使用 Phpunit 如果我只是运行我的测试 phpunit log junit 输出 xml 这在一秒钟内运行 但如果我想要代码覆盖率 phpunit coverage html report log junit 输出 xml 那么
  • Jupyter 笔记本中 shell 命令的实时输出

    我告诉 jupyter 执行一个 python 脚本 python build database py 从终端执行时 Python 脚本会打印执行过程中的进度 但是 在 jupyter 笔记本中 执行后我将所有输出打印为字符串列表 有没有办
  • Linux 脚本从 Excel 中提取信息来创建用户 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 现在我被这个项目困住了 必须从 Ex
  • AVPlayer 直播时的问题 (iOS)

    我有 AVPlayer 问题 1 如何控制音量 2 如何知道AVPlayer是否因为连接不良而重新加载音乐 我有一些指示吗 AVPlayer使用系统音量 因此如果您需要为此提供控件 您可以使用MPVolumeView这为您提供了音量控制滑块
  • 在 php 中制作 mysql 单例数据库类有更简单/更好的方法吗?

    这是我正在使用的