如何将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
相关产品推荐
相关产品推荐

