Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli语句:fetch()一个结果数组_Php_Arrays_Mysqli_Resultset_Dereference - Fatal编程技术网

Php mysqli语句:fetch()一个结果数组

Php mysqli语句:fetch()一个结果数组,php,arrays,mysqli,resultset,dereference,Php,Arrays,Mysqli,Resultset,Dereference,我使用mysqli扩展并将结果绑定到一个对象: class Item { public $id, $name; } $Item = new Item; $stmt->bind_result($Item->id, $Item->name); 每次调用$stmt->fetch()都将覆盖$Item的属性,这些属性将成为引用。如果我只是克隆对象-这些引用仍然存在,并且两个实例同时更改: object(Item)#1 (2) { ["id"]=> &am

我使用mysqli扩展并将结果绑定到一个对象:

class Item {
    public $id, $name;
    }
$Item = new Item;
$stmt->bind_result($Item->id, $Item->name);
每次调用
$stmt->fetch()
都将覆盖$Item的属性,这些属性将成为引用。如果我只是克隆对象-这些引用仍然存在,并且两个实例同时更改:

object(Item)#1 (2) {
  ["id"]=>
  &int(1)
  ["name"]=>
  &string(4) "name"
}
因此,应该有一种方法取消对它们的引用,以便
clone
真正创建一个副本,而不是一组引用的数据。是否有一种简单、灵活的方法来检索所有数据,以便将其存储为对象数组?主要问题是如何删除引用:
&string

我看到的唯一解决方案是实例化另一个对象并手动复制所有属性:

$Item2 = new Item;
foreach ($Item as $prop => $val)
    $Item2->$prop = $val;

但这似乎有点过分:它会复制所有不必要的属性(包括一些未被实际引用的额外属性),而且会对性能造成损失。

如果我理解正确,您想将数据提取到对象中吗?MysqlI有一个fetch_object方法/函数:如下所示:

$foobar = $conn->escape_string($foobar);
$stmt = $conn->query("SELECT * FROM foo WHERE bar = '$foobar'");
while ($item = $stmt->fetch_object("Item")) {
    $items[] = $item;
}
$stmt->close();

如果我理解正确,您想将数据提取到对象中吗?MysqlI有一个fetch_object方法/函数:如下所示:

$foobar = $conn->escape_string($foobar);
$stmt = $conn->query("SELECT * FROM foo WHERE bar = '$foobar'");
while ($item = $stmt->fetch_object("Item")) {
    $items[] = $item;
}
$stmt->close();

您可以实现自己的_uclone()魔术函数,以便创建对象的未引用副本。我认为应该行得通


难看极了,但很管用…

您可以实现自己的_clone()魔术函数,这样它就可以创建对象的未引用“副本”。我认为应该行得通


丑陋的地狱,但工作…

实际上,我写了一个类,将结果字段自动绑定到对象。它唯一缺少的是存储行的选项,而不仅仅是迭代和遗忘。它唯一缺少的是一个存储行的选项,而不仅仅是迭代和忘记。它有,但我想使用准备好的语句:)fetch_object()是mysqli_result的一个方法,不幸的是,它与mysqli_stmtOh无关,是的。因此,您必须使用
mysqli\u query
或您自己的克隆解决方案。它有,但我想为此使用准备好的语句:)fetch\u object()是mysqli\u result的一个方法,不幸的是,它与mysqli\u stmtOh无关,是的。因此,您必须使用
mysqli\u query
或您自己的克隆解决方案。因此,没有已知的魔法可以解除对属性的引用:)因此,没有已知的魔法可以解除对属性的引用?:)
object(Item)#1 (2) {
  ["id"]=>
  &int(2)
  ["name"]=>
  &string(4) "Mchl"
}
object(Item)#2 (2) {
  ["id"]=>
  int(1)
  ["name"]=>
  string(8) "o_0 Tync"
}