首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据库连接传递给PHP方法

如何将数据库连接传递给PHP方法
EN

Stack Overflow用户
提问于 2020-11-20 13:15:40
回答 2查看 113关注 0票数 0

我在PHP中有一个类,其中一个方法需要访问database.How,我是否正确地将数据库连接变量传递给了一个方法?它是作为参数通过构造函数还是方法传递的?或者它是完全不同的东西?

EN

回答 2

Stack Overflow用户

发布于 2020-11-20 15:01:08

请检查以下更新后的答案。经过测试并正常工作。

代码语言:javascript
运行
复制
  <?php

class SomeClass
{


    function setDb($servername, $username, $password, $database)
    {
        // Create the database connection and use this connection in your methods as $this->conn
        $this->conn = new mysqli($servername, $username, $password, $database);
        if ($this->conn->connect_error) {
            die("Connection failed: " . $this->conn->connect_error);
        }
        echo "New successful connection to myDb  \n";
    }

    public function createTable()
    {
        // sql to create table
        $sql = "CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )";

        if ($this->conn->query($sql) === TRUE) {
            echo "New table created successfully \n";
        } else {
            echo "Error: " . $sql . "<br>" . $this->conn->error;
        }
    }
    public function normalInsertDb()
    {
        // sql to insert record using normal query
        $sql = "INSERT INTO MyGuests (firstname, lastname, email)
        VALUES ('John', 'Doe', 'john@example.com')";

        if ($this->conn->query($sql) === TRUE) {
            echo "New record inserted successfully using normal sql statement \n";
        } else {
            echo "Error: " . $sql . "<br>" . $this->conn->error;
        }
    }
    public function preparedInsertDb()
    {
        // prepare and bind
        $stmt = $this->conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
        $stmt->bind_param("sss", $firstname, $lastname, $email);
        // set parameters and execute
        $firstname = "John";
        $lastname = "Doe";
        $email = "john@example.com";
        $stmt->execute();

        $firstname = "Mary";
        $lastname = "Moe";
        $email = "mary@example.com";
        $stmt->execute();

        $firstname = "Julie";
        $lastname = "Dooley";
        $email = "julie@example.com";
        $stmt->execute();

        echo "New records inserted successfully using PREPARED STATEMENTS \n";

        $stmt->close();
        $this->conn->close();
    }
}

$obj = new SomeClass();
$obj->setDb('localhost', 'homestead', 'secret', 'myDb'); //we assume the database myDb exists
$obj->createTable();
$obj->normalInsertDb();
$obj->preparedInsertDb();

我的结果是:

票数 1
EN

Stack Overflow用户

发布于 2020-11-20 16:00:13

如果数据库连接仅由对象的一个方法使用,则将其作为参数传递给此方法没有任何错误。

然而,大部分情况并非如此。因此,当您在较早的阶段(在脚本之上)建立数据库连接,然后将其作为构造函数参数传递给所有需要它的对象时,您会做得更好。然后,不同的对象可以对不同的方法和内部的私有方法使用相同的连接。

如果要进一步优化,请将连接包装到一个专用类中,并使用依赖项注入将其放入使用者对象中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64924170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档