无法通过mysqli连接到课堂

时间:2013-05-20 23:59:35

标签: php mysqli connection

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

db.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
}

的index.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();
    }
?>

client.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中有效,但在客户端类中却没有?

由于

1 个答案:

答案 0 :(得分:1)

您的主要问题是假设

你假设没有连接通过,从间接后果判断。

但程序员在推理中应始终保持逻辑正确。

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

如果您的查询失败,您必须使用$this->con->error询问mysql,发生了什么,因为此函数将为您提供比简单“失败”更多有用的信息。我在这里解释的正确用法:https://stackoverflow.com/a/15447204/285587