1

我正在尝试将 mysqli 数据库连接传递给 php 类。我到目前为止的代码(为简单起见而删减)如下:

数据库.php

$db_host = 'localhost';
$db_name = 'dbname';
$db_user = 'username';
$db_password = 'password';

$db = array('db_host'=>$db_host, 
    'db_name'=>$db_name, 
    'db_user'=>$db_user,
    'db_password'=>$db_password);

$dbCon = new mysqli( $db['db_host'], 
    $db['db_user'], 
    $db['db_password'], 
    $db['db_name']);

if (mysqli_connect_errno())
{
    die(mysqli_connect_error()); //There was an error. Print it out and die
}

索引.php

<?php
    require_once($_SERVER["DOCUMENT_ROOT"] . "/db.php");

    $sql = "SELECT id FROM usr_clients";
    $stmt = $dbCon->prepare( $sql );
    if ($stmt)
    {
        $stmt->execute();
        $stmt->bind_result($id);
        while($stmt->fetch())
        {
            $cl = new Client($id, $dbCon);
            $cl->doIt();
        }
        $stmt->close();
    }
?>

客户端.php

<?php
    Class Client
    {
        private $con;
        public static $clientCount = 0;

        public function __construct( $id, $con )
        {
            $this->con = $con;

            $sql = "SELECT id FROM usr_clients WHERE id = $id";
            $stmt = $this->con->prepare( $sql );

            if ($stmt)
            {
                echo "it worked!";
            }
            else
            {
                echo "it failed";
            }
        }
}
?>

现在 index.php 页面成功识别了 db.php 中声明的数据库连接,并返回了所有客户端的列表。然后它遍历每个客户端,并创建一个“客户端”对象,将数据库连接传递给它。

问题似乎就是从这里开始的。在客户端类中,无法识别数据库连接。我在页面上收到多个错误,说“它失败了”。在日志中,有一行关于在非对象上调用 prepare() 。

谁能解释为什么连接在 index.php 中有效,但在客户端类中无效?

谢谢

4

1 回答 1

1

您的主要问题是假设

从间接后果来看,您假设没有通过任何连接。

但是程序员的推理应该始终在逻辑上是正确的。

谈连接?验证非常连接。var_dump($con)在构造函数中。var_dump($this->con)在方法中。如果它失败了 - 只有现在你才能责怪连接并开始解决问题。
如果没有 - 没有理由寻找另一种连接传递方法。然而,是时候找出真正的问题了。

如果您的查询失败,您必须使用 询问 mysql,这是怎么回事$this->con->error,因为这个功能将为您提供比简单的“它失败”更多的有用信息。我在这里解释的正确用法:https ://stackoverflow.com/a/15447204/285587

于 2013-05-21T04:03:10.917 回答