【问题标题】:Unsuccessful trying to get a function of a class to work inside of another function试图让一个类的函数在另一个函数中工作不成功
【发布时间】:2015-05-13 02:43:27
【问题描述】:

我试图让一个类中的一个函数与另一个函数一起工作,但没有成功。

这是我的代码:

<?php
class db {

    public function dbLogin() {
        $mysqli = new mysqli("127.0.0.1","user","passowrd","database");

        if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
        }
        echo $mysqli->host_info . "\n";
    }

    public function selectQuery() {
        $this->dbLogin();
        $query = "
            SELECT      column
            FROM        table
        ";

        if ($mysqli->query($query)) {
            echo "success";
        }       
    }
}

$fData = new db();
$fData->dbLogin();
$fData->selectQuery();
?>

数据库连接工作正常。但是,一旦查询行运行,我就无法得到任何回显。

到目前为止我已经尝试过:

-将dbLogin() 函数替换为construct() 函数,然后去掉$this-&gt;dbLogin 行和$fData-&gt;dbLogin() 行。这不起作用。

-以不同的变体移动此代码,以防我的顺序错误。那什么也没做。

-谷歌搜索/查看 StackOverflow 上的类似问题,但没有运气。

我可以轻松地实现这种程序风格,但现在是我摆脱这种风格的时候了。我确信有更好的方法可以使用 OOP 设计模式连接到数据库,但我对 OOP 是全新的,所以我试图以此作为一个教训,并更好地理解函数如何与彼此在一个班级内。我知道我可以将连接和查询放在一个函数中,但是我不知道如何使函数在类中相互交互。

如何根据dbLogin函数中的登录信息运行selectQuery函数中的查询?

【问题讨论】:

    标签: php function class oop mysqli


    【解决方案1】:

    你需要在函数之外定义你的$mysqli,你的代码的问题与全局和本地范围有关。

     <?php
     class db {
    private $mysqli;
    public function dbLogin() {
            $this->mysqli = new       mysqli("127.0.0.1","user","passowrd","database");
    
        if ($this->mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $this->mysqli->connect_errno . ") " . $mysqli->connect_error;
        }
        echo $mysqli->host_info . "\n";
    }
    
    public function selectQuery() {
        $this->dbLogin();
        $query = "
            SELECT      column
            FROM        table
        ";
    
        if ($this->mysqli->query($query)) {
            echo "success";
        }       
    }
    }
    
    $fData = new db();
    $fData->dbLogin();
    $fData->selectQuery();
    ?>
    

    这会起作用

    【讨论】:

      【解决方案2】:

      $mysqli 变量是 dbLogin() 函数范围的本地变量。您不能从 selectQuery() 访问它。

      尝试将 Mysqli 对象实例设置为像 $this->mysqli 这样的对象属性,然后您可以在其他方法中引用它。

      【讨论】:

        猜你喜欢
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 2017-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-08
        • 1970-01-01
        相关资源
        最近更新 更多