You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL查询结果存入Prestashop类内部的数组?

解决Prestashop自定义字段数据存入类内部数组的问题

嘿,我明白你现在的需求——已经在类外部写好了能正常运行的MySQL查询,现在要把查询结果存到类内部的数组里对吧?咱们一步一步来搞定它。

首先先把你现有的数据库连接代码规整一下:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";

// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接状态
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

接下来我给你两种可行的方案,你可以根据自己的代码结构选合适的:

方案1:把查询逻辑整合到类内部(更符合面向对象规范)

先定义一个包含数组属性的类,再把查询和存储逻辑写到类的方法里:

class CustomPrestashopHandler {
    // 类内部用来存自定义字段数据的数组
    private $customFieldData = [];
    // 数据库连接对象(推荐用依赖注入的方式传入,避免全局变量)
    private $dbConnection;

    // 构造函数传入数据库连接
    public function __construct($dbConn) {
        $this->dbConnection = $dbConn;
    }

    // 执行查询并把结果存入内部数组
    public function loadCustomFields() {
        // 替换成你实际的自定义字段查询语句
        $sql = "SELECT * FROM `your_custom_fields_table`";
        $result = $this->dbConnection->query($sql);

        if ($result->num_rows > 0) {
            // 循环读取结果,存入类内部数组
            while($row = $result->fetch_assoc()) {
                $this->customFieldData[] = $row;
            }
        }

        // 记得关闭结果集释放资源
        $result->close();
    }

    // 提供获取内部数组的方法,方便后续使用
    public function getCustomFieldData() {
        return $this->customFieldData;
    }
}

使用方式也很简单:

// 先创建数据库连接(你的原有代码)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 实例化类并传入连接
$handler = new CustomPrestashopHandler($conn);
// 调用方法加载数据
$handler->loadCustomFields();

// 之后要使用数据的话,直接调用获取方法
$fieldData = $handler->getCustomFieldData();

方案2:类外部完成查询,再把结果传入类内部

如果你已经在类外部拿到了查询结果,只想把结果存入类的数组属性,可以这样做:

class CustomPrestashopHandler {
    private $customFieldData = [];

    // 提供一个方法,接收外部传入的数组
    public function setCustomFieldData($data) {
        // 先校验一下传入的是不是数组
        if (is_array($data)) {
            $this->customFieldData = $data;
        }
    }

    public function getCustomFieldData() {
        return $this->customFieldData;
    }
}

对应的使用流程:

// 原有数据库连接和查询逻辑
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 执行查询并把结果存到外部数组
$sql = "SELECT * FROM `your_custom_fields_table`";
$result = $conn->query($sql);
$externalFieldData = [];
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $externalFieldData[] = $row;
    }
}
$result->close();

// 实例化类并传入外部数组
$handler = new CustomPrestashopHandler();
$handler->setCustomFieldData($externalFieldData);

// 获取类内部的数组
$fieldData = $handler->getCustomFieldData();

最后给你个小提醒:如果是在Prestashop环境下开发,其实可以直接用Prestashop自带的Db类来操作数据库,不用自己写原生mysqli连接,比如:

// Prestashop自带的查询方式,直接返回结果数组
$fieldData = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'your_custom_table`');

这样更符合Prestashop的开发规范,也能避免一些兼容性问题。

内容的提问来源于stack exchange,提问作者Dario Filidei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:19:46