2012-05-31 70 views
1

嘿家伙我目前正在尝试调试一些mysqli封装类的代码。香港专业教育学院碰到一个问题描述here试图与这个是最新的迭代和一些解决方案(似乎不工作):如何保存mysqli_result对象的内容?

$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()存储没有问题(?)的结果对象。

+0

,如果你希望将结果存储在对象,你需要创建一个变量类各个领域的queering然后将其存储在对象 –

+1

我不认为这是因为错字而失败吗? kek => $ key – ben

+0

'$ this-> result-> kek'应该是'$ this-> result - > $ key'? –

回答

1

您的示例编码不提取行。你需要做到这一点,其中一个选项是fetch as objects

$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 
+0

如果我的代码可能会返回到错误的生病我试试这个谢谢:) –

0

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

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

这将创建一个具有相同的名称,$键的值的属性。请记住,如果$ 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']; 
+0

试过了,它似乎没有工作,我再试一次,看看我所看到的一切,看看是否有其他的东西搞乱了它。另外我更喜欢为了清晰而声明变量非动态样式(我的背景主要是C/C++)如果我可以在5秒内以非动态方式声明某些东西,我通常会:) –

+2

不能使用stdClass类型的对象作为数组。相反:'echo $ this-> result - > {'Hello World'};'无论如何,提前创建具有所需公共属性的特定类(或者使用getters和setter)可能会更好。 – webbiedave

+0

我同意声明变量是首选。为了清楚起见,我总是声明它们,但是如果你从一个结果集中拉出来,而你并不总是知道列名,那么这会有所帮助。 – davidethell