在 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 单例数据库类有更简单/更好的方法吗? 的相关文章

  • 调用未定义的函数curl_version

    您好 我已经在运行 php 5 6 的 ubuntu 14 04 上安装了 wordpress 4 6 网站 管理页面不可见 我可以在日志中看到以下错误 致命错误 在第 274 行调用 var www html files modules
  • 使用 cURL PHP 发布到 Facebook 用户的墙

    我正在存储 facebook 用户 ID 和访问令牌 我可以将此信息发布到选定用户的留言墙上吗 在这里找到以下代码 http developers facebook com docs reference api post http deve
  • 访问父函数中定义的变量

    有没有办法访问 foo从内部inner function outer foo function inner print foo inner outer PHP 在 PHP 5 3 中 你可以这样做 function outer foo in
  • openssl_decrypt 标签值

    我在网站中使用 openssl encrypt decrypt 方法 但在使用 tag 选项时遇到了一些问题 openssl encrypt data method key options iv tag openssl decrypt da
  • PSR-2 编码标准:为什么仅包含 PHP 的文件中没有 PHP 结束标记? [复制]

    这个问题在这里已经有答案了 我刚刚听说PSR 2编码标准 http www php fig org psr psr 2 在对此问题的评论中 是否有任何理由在方法和成员变量名称之前使用 public 关键字 https stackoverfl
  • 刷新页面后保留输入值

    我有一个带有输入字段的表单 该输入包含一个下拉菜单 从数据库中读取信息 如果用户输入值 并且当他到达下拉菜单时 他没有找到他想要的内容 他会转到另一个页面将此信息添加到下拉菜单 然后转到第一页继续输入信息 如果他转到另一个页面向下拉菜单添加
  • 使用 Python 2.7 和 MySQLdb 将二进制数据插入 MySQL 中的 blob 列时如何避免编码警告

    我在将二进制数据插入到longblob使用 Python 2 7 中的 MySQLdb 在 MySQL 中的列 但我收到一个编码警告 我不知道如何解决 test py 11 Warning Invalid utf8 character st
  • 正则表达式 - 剥离非数字并删除分(如果有)

    我目前正在开发一个 PHP 项目 需要一些正则表达式的帮助 我希望能够获取用户输入的货币值并删除所有非数字和小数位 分 Ex 2 000 00 到 2000 2 000 00 美元 到 2000 2abc000 到 2000 2 000 到
  • 根据 MySQL 列内容的长度创建索引?

    如何根据值的长度在 MySQL v 5 0 myisam 数据库引擎 中的列上创建索引 它是文本数据类型 最多 7000 个字符 我是否必须添加具有第一列长度的另一列 是的 因为 MySQL 不支持基于函数的索引 例如ADD INDEX m
  • XAMPP 不解析 PHP

    我刚刚安装了 XAMPP 1 8 1 并重新启动了计算机 开始运行 Apache 和 MySQL 并在 XAMPP 下的 htdocs 目录中的测试文件夹中创建了一个测试文件 当我访问 xampp index php 时 他们的页面显示正常
  • 当我使用加盐 CRYPT_MD5 加密我的密码时,正在加密什么?

    对字符串使用 md5 总是会产生字母数字加密结果 即 没有符号 然而 当我使用 php crypt 函数 特别是带有盐的 CRYPT MD5 并且它已打开 我已经检查过 时 它返回的假定 md5 哈希看起来不像 md5 哈希 例如 如果我
  • 在 ASP.NET MVC 中使用 MySQL 的 AccountController

    在 Visual Studio 中创建默认的 ASP NET MVC 项目会设置一个可以在其中注册用户的基本项目 我将如何继续更改它以使用 MySQL 服务器而不是 SQLServer 现在可以使用了 安装最新的 Connector NET
  • 如何在数据库中找到实际的联系表7结构?

    我想找到我所有表单的实际代码 有很多 例如 cf7 代码如下所示
  • 解码Json数据数组并插入到mysql

    这个问题可能已经在这里问过 但我尝试搜索找不到它 我有如下 Json 数据 CityInfo CityCode 5599 Name DRUSKININKAI CityCode 2003 Name KAUNAS CityCode 2573 N
  • MySQL获取最后10条记录中的第一条记录

    在Mysql中 我试图获取最后10条记录中最旧的记录 为了得到最后 10 个我会简单地做SELECT FROM table ORDER BY id DESC LIMIT 10 为了获得最旧的 我只需使用 ASC 顺序 我需要首先按 DESC
  • Symfony错误在链配置的命名空间XXX中找不到类XXX

    关于这个主题已经有一些其他问题 但没有一个真正有帮助 我是 Symfony 的新手 所以很难理解它 我在文件 Client IntranetBundle LDAP LDAPAuthenticationProvider php 中 此代码导致
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • Yii框架异步请求

    我有一个执行 3 个任务的 ajax 请求 保存模型 数据库 发电子邮件 给出成功或失败的消息 因为这个任务需要的时间太长了 用户最多可以等待 20 秒以获得响应 成功或失败消息 如果用户关闭浏览器 则其会停止用户当前进程的操作之一 这是糟
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • 如何将 JSON 文本转换为 PHP 关联数组

    我将以下 JSON 对象存储在文本文件 data txt 中 player black time 0 from 2c to 3d 我使用 php 阅读 问题 有没有简单的方法可以转换 data到 PHP 关联数组 我尝试过使用json de

随机推荐

  • 从另一个进程访问 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 单例数据库类有更简单/更好的方法吗?

    这是我正在使用的