Php 未定义的偏移量1,但count()=2
我有一个由sql查询填充的数组。我需要两个元素,count()函数返回2。我可以毫无疑问地访问第一个元素,但是当我尝试访问索引1处的元素时,会出现错误“Undefined offset 1”。以下是阵列的填充方式:Php 未定义的偏移量1,但count()=2,php,sql,Php,Sql,我有一个由sql查询填充的数组。我需要两个元素,count()函数返回2。我可以毫无疑问地访问第一个元素,但是当我尝试访问索引1处的元素时,会出现错误“Undefined offset 1”。以下是阵列的填充方式: function getThreadsByOwner($owner_id,$mysqli) { $stmt = $mysqli->prepare("SELECT thread_id FROM threads
function getThreadsByOwner($owner_id,$mysqli)
{
$stmt = $mysqli->prepare("SELECT thread_id
FROM threads
WHERE owner_id = ?
ORDER BY time ASC");
$stmt->bind_param('s', $owner_id);
if (!$stmt->execute()) {header("Location:server_error.php");}
$result = $stmt->get_result();
return $result->fetch_array();
}
有人能告诉我是什么导致了这个问题以及如何解决它吗?问题是,
fetch\u array()
只返回一行的数据,而不同的元素并不表示行,而是表示列。看
因此,索引1未定义的原因是,因为您只获取一列
如果需要两行,则必须调用该命令两次
这将解决您的问题:
$ret = [];
$ret[0] = $result->fetch_array();
$ret[1] = $result->fetch_array();
return $ret;
但是,也可能是表为空,并且结果集中的行数少于2行。您还应注意这一点,并使用:
$ret = [];
$row = $result->fetch_array();
if($row != NULL){
$ret[0] = $row;
$row = $result->fetch_array();
if($row != NULL){
$ret[1] = $row;
}
}
return $ret;
现在,当您尝试访问较小的阵列时,您还必须关心它们。
您可以使用count($ret)
,它应该始终返回0、1或2
只要您只想读取2行,此代码就可以了。但是,一旦您一次检索到多行,循环就是更好(也更可读)的选择:
$ret = [];
while ($row = $result->fetch_array()) {
$ret[] = $row;
}
return $ret;
fetch_array()只返回一行
您需要在while循环中使用它:
function getThreadsByOwner($owner_id,$mysqli)
{
$stmt = $mysqli->prepare("SELECT thread_id
FROM threads
WHERE owner_id = ?
ORDER BY time ASC");
$stmt->bind_param('s', $owner_id);
if (!$stmt->execute()) {header("Location:server_error.php");}
$result = $stmt->get_result();
$res = array();
while ($row = $result->fetch_array()) {
$res[] = $row;
}
return $res;
}
这将返回一个包含任意行数的数组,而不仅仅是2行
希望这有帮助 啊,这很有道理。我应该阅读文档,而不是仅仅假设。谢谢你的帮助!