我正在尝试将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中有效,但在客户端类中却没有?
由于
答案 0 :(得分:1)
您的主要问题是假设。
你假设没有连接通过,从间接后果判断。
但程序员在推理中应始终保持逻辑正确。
谈论联系?验证连接。构造函数中的var_dump($con)
。方法中var_dump($this->con)
。如果它失败了 - 只有现在你可以责备连接并开始寻找解决方案
如果不是 - 没有理由寻找另一种连接传递方法。然而,是时候找到真正的问题了。
如果您的查询失败,您必须使用$this->con->error
询问mysql,发生了什么,因为此函数将为您提供比简单“失败”更多有用的信息。我在这里解释的正确用法:https://stackoverflow.com/a/15447204/285587