gpt4 book ai didi

php - 从类内部查询mysql数据库

转载 作者:可可西里 更新时间:2023-11-01 07:49:02 25 4
gpt4 key购买 nike

我正在尝试从一个类中对 MySQL 数据库运行查询,但由于某种原因无法正常工作。我在一个单独的文件中有一个类,我正在使用 require_once() 函数链接到该文件。

这是主 .php 文件的样子:

<?php
require_once("connect.php");
require_once("theClass.php");

$a = new theClass;
$a->runQuery();
}

连接.php:

<?php
//connect to mySQL database
$mysqli = new mysqli("host", "user", "password", "db");
if ($mysqli->connect_errno)
{
echo "<br><h1>Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error . "</h1><br>";
}

类.php:

<?php
require_once('connect.php');

class theClass
{
//class variables and other functions here

function runQuery()
{
$query = "SELECT col_1 FROM db.table";
$stmt = $mysqli->prepare($query);
stmt->execute();
$stmt->bind_result($r);

while($stmt->fetch())
{
echo $r . "<br>";
}
}
};

我已经尝试将类复制到主 .php 文件中,但它仍然不起作用;但是,我在外部 .php 文件和主 .php 文件中使用了完全相同的代码(查询、准备、执行、bind_result 和获取部分),并且两次都有效。这使我相信您无法从类内部运行查询,或者有不同的方法可以这样做。谁能指出我正确的方向?

谢谢

最佳答案

将其传递给方法本身

您必须将数据库对象传递给该方法,因为它们不在同一范围内:

function runQuery($mysqli)

并称它为

$a = new theClass;
$a->runQuery($mysqli);

传递给构造函数

如果您的类进行了大量的数据库调用,您可以简单地将其传递到构造函数中并将其保存为私有(private)变量供以后使用:

class theClass
{
private $mysqli;

function __construct($mysqli) {
$this->mysqli = $mysqli;
}

function runQuery()
{
$query = "SELECT col_1 FROM db.table";
$stmt = $this->mysqli->prepare($query);
stmt->execute();
$stmt->bind_result($r);

while($stmt->fetch())
{
echo $r . "<br>";
}
}
};

并称它为

$a = new theClass($mysqli);
$a->runQuery();

这两种方法都明确了你的类的依赖是一个mysqli对象,有利于以后的维护和可读性。

关于php - 从类内部查询mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com