创建 PHP PDO 数据库类,OOP 遇到麻烦

2023-12-08

这是我当前的数据库类:

class Database {

    private $db;

    function Connect() {
        $db_host = "localhost";
        $db_name = "database1";
        $db_user = "root";
        $db_pass = "root";
        try {
            $this->db = new PDO("mysql:host=" . $db_host . ";dbname=" . $db_name, $db_user, $db_pass);
        } catch(PDOException $e) {
            die($e);
        }
    }

    public function getColumn($tableName, $unknownColumnName, $columnOneName, $columnOneValue, $columnTwoName = "1", $columnTwoValue = "1") {
        $stmt = $this->db->query("SELECT $tableName FROM $unknownColumnName WHERE $columnOneName='$columnOneValue' AND $columnTwoName='$columnTwoValue'");
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $results[0][$unknownColumnName];
    }
}

我尝试使用以下代码运行它:

$db = new Database();
$db->Connect();
echo $db->getColumn("Sessions", "token", "uid", 1);

我收到以下错误:

PHP 致命错误:在第 19 行 /Users/RETRACTED/RETRACTED/root/includes/Database.php 中的非对象上调用成员函数 fetchAll()

知道怎么回事吗?谢谢


  1. 该函数容易出现SQL注入.
  2. 此函数不会让您使用最简单的 OR 条件获得列.
  3. 该函数使 SQL 语言中几乎自然的英语变成难以阅读的乱码.

看,你甚至在写这个函数时都把自己宠坏了。您认为它如何用于日常编码?事实上,这个功能让你的体验harder与原始 PDO 相比 - 您必须学习所有新语法、大量例外和最后一刻的更正。

请返回原始 PDO!

让我告诉你正确的方法

public function getColumn($sql, $params)
{
    $stmt = $this->db->prepare($sql);
    $stmt->execute($params);
    return $stmt->fetchColumn();
}

像这样使用

echo $db->getColumn("SELECT token FROM Sessions WHERE uid = ?", array(1));

这样您就可以使用SQL 的全部功能不限于愚蠢的子集,以及准备好的报表的安全性,但要保持代码易于理解。
虽然仍称其为排成一行- 这是你最初的(而且非常正确的!)意图。

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

创建 PHP PDO 数据库类,OOP 遇到麻烦 的相关文章

  • 返回变量在 PHP 中不起作用(即没有返回值!)

    我更喜欢使用 Python 语言进行编程 但必须使用 PHP 来处理特定的网站应用程序项目 在 PHP 中 我试图将函数中的值 返回 到主程序环境 用于后续计算 但无论我尝试什么 函数中计算的值都不会返回该值 而是从函数中回显 工作正常 在
  • 计算两个数字之间的差异

    我想计算两个给定数字之间的差异 例如 1 5 或 24 35 我必须将数组中的数字分开并写出它们之间的差异 如下所示 1 2 3 4 5 或 24 25 26 27 28 29 30 31 32 33 34 35 是否有任何 php 函数可
  • 如何通过键查找最大和最小日期

    我有一个数组 a array 2010 05 03 gt 100 2010 05 04 gt 400 2008 05 01 gt 800 2011 01 01 gt 800 我如何找到最大值和最小值key date 例如 max gt 20
  • 如何在 标签中用 %20 替换空格

    我想替换 html 文本的图像标签中的所有空格 Example img src to img src photo 201 jpg 我没有找到 preg replace 的解决方案 但它可能是一个简单的正则表达式行 谢谢 Edit 抱歉各位
  • 将 SQL 中的数据存储在数组中

    我正在尝试将 sql 数据库中的数据存储到数组中 目前我有这个 query mysql query SELECT FROM InspEmail WHERE Company LIKE company while row mysql fetch
  • PSR-4 代码库中条令生成器的解决方法

    在 Windows 机器上使用 Symfony 2 和 Doctrine 我正在尝试 从现有模式生成实体 php app console doctrine mapping import force CoreBundle annotation
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 一次将多个值插入MySQL [重复]

    这个问题在这里已经有答案了 谁能解释一下为什么这个 PHP MySQL 不起作用 基本上我需要从表单中一次插入大量行 因此会有多个名称字段 多个短 中 长字段等 我收到此错误 Notice Undefined variable Short1
  • 如何将 ctype_alpha 与 UTF-8 结合使用

    如何将 ctype alpha 与 UTF 8 一起使用 我有这个代码 if empty POST false if isset POST first name empty POST first name if ctype alpha PO
  • C++ - 模板类中模板函数的单独声明/定义

    我知道在标头中声明模板类方法并在源文件中定义它的语法如下 myclass h template
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • Propel Query 中的动态表名称

    我想知道您是否可以使 propel 查询的表名称动态化 有点像变量 一个例子类似于 DynamicVar Query create 我让它在 ifs 中工作 就像下面的例子一样 但如果更动态地制作 可以删除相当多的行 这些表的设置都是相同的
  • CSV 从 UTF8 到 ISO-8859-1

    我正在尝试修改我的 CSV 导出 但它不会将我的 CSV 从 UTF 8 转换 保存为 ISO 8859 1 请问我做错了什么吗 实际上自从修改了这个之后 我得到了一个空的 CSV 文件 php 7 0 x function my Gene
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • cURL '格式错误的网址'

    This url 在浏览器中工作得很好 但 cURL 返回错误 3 格式错误的 url 关于解决方法有什么想法吗 EDIT 卷曲代码 function get web page url options array CURLOPT RETUR
  • 我可以显示我在 PHP 中设置的所有 cookie 吗?

    我正在尝试诊断 cookie 中的错误 但 cookie 的名称不是应有的名称 PHP 有没有办法打印我的域设置的所有 cookie 你有没有尝试过 print r COOKIE
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • 如何覆盖 phpunit 中导出的变量?

    我知道我可以设置环境变量 https phpunit de manual current en appendixes configuration html在我的 phpunit xml 里面
  • 从多个选择列表中插入数据到mysql数据库(html形式)

    我制作了一个表格 其中有商店的 ID
  • WordPress 事件按元生效日期排序

    我在获取参数数组以按 Wordpress 中的日期对事件列表进行排序时遇到一些问题 我在 Stack Overflow 和其他地方找到了几个建议的解决方案 但经过大量的试验和错误后 这些解决方案似乎都不起作用 这没什么花哨的 而且应该比这容

随机推荐

  • iPhone 应用程序升级和移动 xibs/nibs 导致资源过时

    我有一个未本地化的运输应用程序 其主项目目录中有 foo xib 为了准备本地化 我将其移至 en lproj foo xib 现在 当我构建我的应用程序并安装在我的测试设备上时 它最终会使用陈旧的 foo nib 它必须是之前存在的 安装
  • 从宽到长返回空输出 - Python 数据框

    我有一个数据框 可以从下面给出的代码生成 df pd DataFrame person id 1 2 3 date1 12 31 2007 11 25 2009 10 06 2005 val1 2 4 6 date2 12 31 2017
  • NativeApplicationClient 不受任何支持

    当在我的 Visual Studio Winform 项目中使用此代码时 var provider new NativeApplicationClient GoogleAuthenticationServer Description Cli
  • Python,安装 matplotlib 时出错

    操作系统 Windows 10 Python版本 3 9 0 错误代码 ERROR Command errored out with exit status 1 python setup py egg info Check the logs
  • 使用flock和lockfile在bash中锁定文件

    我花了一天的大部分时间寻找这个问题的解决方案 我想我已经接近边缘了 我需要在 bash 中做的是 编写 1 个脚本 该脚本将定期读取您的输入并将它们写入文件中第二个脚本将定期打印出完整的文件 但仅当写入新内容时 这意味着它永远不会一个接一个
  • Android RadioGroup 检查多个 RadioButton?

    我在用RadioGroup added RadioButton rdbut to RadioGroup rdgrp like rdgrp addView rdbut for int j 0 j lt 3 j RadioGroup rdgrp
  • 使用关联标签/单元提取数据

    我一直在尝试分离出隐藏在文本句子中的关键数据 例如 我已经使用以下代码取得了一些进展 但它也提取了不需要的值 let Source Excel CurrentWorkbook Name Table3 Content Changed Type
  • 写行方法

    我有一个日志文件 txt 其中包含以下信息 Filename1 A3332NCDER Filename2 B3332NCDER Filename3 B1222NCDERE Filename4 C1222NCDER Filename4 C12
  • 在 pip jnius 安装中找不到 JRE_HOME

    正在尝试安装jnius来自 pip 这是一个要求pip install sikuli 这是我尝试安装时遇到的错误 变量定义是否正确 有谁明白为什么它一直说找不到JRE HOME Edit 我的路径变量是 setup py 包含 jdk ho
  • 这个 PHP 随机数库如何工作?

    From http fullthrottledevelopment com php nonce library download 有一个PHP nonce库 但是有一些东西我不知道理解 第一个是它提醒我们为FT NONCE UNIQUE K
  • 如何终止与 grep 匹配时间超过 30 分钟的进程?

    我有一组并行运行的进程 有时 有些内容的停留时间会超过脚本允许的时间 time start microtime true max run time 30 60 30 minutes measured in seconds while mic
  • 如何使用 Exchange Web 服务托管 API 设置联系人头衔

    我正在尝试使用 EWS API 创建新联系人 我可以设置除联系人标题属性之外的所有所需值 我尝试了代码 oContact new Contact oService oContact GivenName John oContact Surna
  • 使用 NLB 和 IAM 身份验证公开 AWS MSK - 主机名验证失败

    我们正在努力让 Amazon MSK Kafka 与 IAM 身份验证配合使用 然后使用 aws kafka 广告侦听器中的更改通过 DNS 公开访问它 为了实现这一点 我们遵循如下相同的基础设施计划 但我们不使用接口端点 而是使用网络负载
  • 如何以编程方式创建和管理 macOS Safari 书签?

    我正在制作一个脚本 它会更新我的 macOS Safari 上的书签 以便始终将我订阅的所有 Reddit 子版块作为特定文件夹中的单独书签 我已经将所有 subreddits 作为 Python 中元组的排序列表 将所需的书签名称作为第一
  • SML 中绑定的价值?

    有人可以解释一下为什么评估后 and 的值一定是 16 这是正确的答案吗 我认为答案 3 是因为我们调用函数 f 并将值 1 和 2 作为函数 f 发送 但看不到值 5 和 10 但我想我错了 val x 1 val y 2 val f f
  • 在 SwiftUI 中将 NavigationButton 与服务器请求结合使用

    我怎样才能做一个NavigationButton在进入下一个视图之前等待服务器响应 我尝试过这样的事情 NavigationButton destination LogonView onTrigger gt Bool in return s
  • 如何从远程服务器加载图像到iPhone中的UIImageView上?

    我正在尝试从应用程序中的 UIImageView 上的远程服务器加载图像 是否可以从远程服务器加载图像 我正在使用以下代码 id path http upload wikimedia org wikipedia commons c c7 S
  • 在 Swift 中,无主引用与弱引用[重复]

    这个问题在这里已经有答案了 如果你有一个Dog弱引用Bone 这意味着在这种情况下 Dog 是引用的 所有者 并且它使用骨骼 但是骨骼可以不存在 而 Dog 仍然可以运行 因为对骨骼的引用是可选的 然而 对于 无主 关键字 无主 似乎不是在
  • 从 php 循环绘制多个图表(Chart.js)以读取多个文件

    我一直在尝试使用 Chart js 从 php 循环绘制多个图表 事实证明 Chart js 只会将数据聚集在一个画布 第一个画布 中 其他画布最终会变成空白 我觉得我已经很接近了 但还没有完全实现 有人可以帮助我吗 提前致谢 这是我的代码
  • 创建 PHP PDO 数据库类,OOP 遇到麻烦

    这是我当前的数据库类 class Database private db function Connect db host localhost db name database1 db user root db pass root try