【问题标题】:Querying database inside of PHP class?在 PHP 类中查询数据库?
【发布时间】:2015-05-08 19:00:52
【问题描述】:

所以这很简单。

本质上,我想连接以下类:

class mailManager{

function add($address){
    $check = $db->query("SELECT * FROM mail_list WHERE email = '$address'");
    $exist = mysqli_num_rows($check);
    if($exist > 0){
        return "Whoops! Your email is already registered with us.";
    }else{
        if($insert = $db->query("INSERT INTO mail_list (email, datetime) VALUES ('$address', DATE)")){
            return "Success! You've joined the CSGO Earn family.";
        } else {
            return "Aw snap! There was a database communication error. Please try later.";
        }

    }

}

}

到数据库。

但是,我尝试的任何“明显”方法似乎都不起作用,并且谷歌搜索没有产生我能理解的结果。也许有人可以简单地为我解释一下?

注意:SQL 存在,但它没有做任何事情(显然)。

问候

【问题讨论】:

  • $db 在哪里定义?如果它没有在函数中定义,或者作为函数参数传递,你将无法使用它。
  • 首先你的数据库没有定义。第二个 $exist = mysqli_num_rows($check);为此,您需要更改它 $exist = $check->num_rows();
  • 尝试将日期更改为NOW()

标签: php database class oop


【解决方案1】:

您的班级无法立即访问您的$db。您可以通过几种不同的方式做到这一点。

1)$db 传递给您的public function __construct($db) 并将其分配给像private $db; 这样的类成员(最有用)

然后您可以像 $check = $this->db->query("..etc.."); 一样访问它

2) 通过参数将其传递给add() 函数,如下所示:

public function add($address, $db) {
}

3) 将其作为全局变量引入:(最简单)

function add($address){
    global $db;
    $check = $db->query("SELECT * FROM mail_list WHERE email = '$address'");
    /*

        etc....

    */
}

我建议您学习如何做第一个,因为当您在课堂上进行大量数据库调用时,它会非常方便。

关于函数中代码的另外两件事。

1) 你应该使用NOW() 而不是DATE

2) 由于您使用的是 mysqli 的 OOP 实现,您应该将 mysqli_num_rows($check); 更改为 $check->num_rows();。我不确定它是否会按照您的方式工作,但即使这样做,统一对待您的对象也是一种好习惯。

【讨论】:

  • 太棒了!感谢您的回答和最后的额外提示。如果您没有注意到,我是 OOP 的新手。
猜你喜欢
  • 2023-01-30
  • 1970-01-01
  • 2018-10-05
  • 2017-08-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多