1

嘿伙计们,我目前正在尝试为 mysqli 封装类调试一些代码。我遇到了这里描述的问题,尝试了一些解决方案,这是最新的迭代并且(似乎不起作用):

$this->result = new stdClass();
foreach($res = $this->conn->query($sql) as $key => $value) {
    $this->result->$key = $value;
}

如果有人知道以某种方式存储结果或使用指针和 $result->free_result() 创建系统的方法;有时会打电话给它,将不胜感激。我有点难过,时间很短。

提前致谢!

编辑截至目前,我的原始实现似乎正在工作,不确定这是否会通过测试成立。目前我有一个自定义的 $this->query() 函数调用 mysqli->query 并将结果存储在 $this->result 中,但是在某些情况下似乎 $this->result 变得未设置。继续测试/调试我拥有的东西,看看它是否会再次发生。感谢那些回答的人:)

编辑 2 通过相当多的反复试验,我将我遇到的问题追溯到 SQL 查询的异常行为。似乎不可能在没有问题(?)的情况下存储来自 mysqli::query() 的结果对象。

4

2 回答 2

1

您的示例编码没有获取行。您需要这样做,其中一个选项是作为对象获取

$this->rows = array();

$res = $this->conn->query($sql);

while ($obj = $res->fetch_object()) {
    $this->rows[] = $obj;
}

echo $this->rows[0]->id; // assuming you have a column named id
于 2012-05-31T20:14:29.950 回答
0

您不必提前在 PHP 类中声明属性。只需动态分配它:

foreach($res = $this->conn->query($sql) as $key => $value) {
    $this->result->$key = $value;
}

这将创建一个与 $key 的值同名的属性。请记住,如果 $key 名称中有空格,您将无法以通常的方式访问该属性。例如:

$key = 'Hello World';
$this->result->$key = 'Hi!';
// now this won't work even though Hello World is the property name:
echo $this->result->Hello World;
// instead do:
echo $this->result->$key;
// or access it like an associative array
echo $this->result['Hello World'];
于 2012-05-31T19:23:55.460 回答