经验法则是,当结果中有多个列时,应使用 and 或 。这些是旨在将结果提取为数组的函数。get_result()
fetch_array()
fetch_all()
的目的是分别绑定每列。每列应绑定到一个变量引用。当然,它不是很有用,但在极少数情况下它可能会派上用场。一些旧版本的PHP甚至没有.bind_result()
get_result()
如果您无法使用,并且仍然想将多个列提取到数组中,则需要执行一些操作来取消引用这些值。这意味着给他们一个新的zval容器。我能想到的唯一方法是使用循环。get_result()
$data = [];
$q->bind_result($data["category_name"], $data["id"]);
while ($q->fetch()) {
$row = [];
foreach ($data as $key => $val) {
$row[$key] = $val;
}
$array[] = $row;
}
PHP手册注释中提到的另一种解决方案是 使用 ,这在内部将执行相同的操作,但在一行中使用匿名函数。array_map
while ($q->fetch()) {
$array[] = array_map(fn($a) => $a , $data);
}
上述两种解决方案将具有以下相同的效果:
$q = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$q->bind_param("s", $user);
$q->execute();
$result = $q->get_result();
$array = $result->fetch_all(MYSQLI_ASSOC);