0 php for-loop 3-tier multidimensional-array
这是我在StackOverflow上的第一个问题,坦率地说,我对PHP很新.只是为了给你一个简短的提醒;)
我正在构建一个基于OOP的网站,采用3层架构.在我的数据抽象层中,我有一个名为DbAdapter的对象,它包含与数据库通信所需的所有功能.其中一个函数如下:read($ sql),它接受SQL查询并将结果存储在二维数组中.
为此,它使用两个嵌套的for循环(一个用于行,一个用于每行的列).虽然迭代器$ i像往常一样递增,但不知何故,数组的最后一个元素被覆盖了.
我完全不知道这是怎么可能的,所以我犯的错误一定是非常愚蠢的.
有人在乎帮助新手吗?
先谢谢你,山姆
public $loadedRows;
public function read($sql)
{
if ($this->connect())
{
$result = mysql_query($sql);
if ($result)
{
$totalRows = mysql_num_rows($result);
$totalFields = mysql_num_fields($result);
for ($i = 0; $i < $totalRows; $i++)
{
for ($j = 0; $j < $totalFields; $j++)
{
$fieldName = mysql_field_name($result, $j);
$loadedFields["$fieldName"] = mysql_result($result, $i, $fieldName);
}
$this->loadedRows[i] = $loadedFields;
}
$this->closeConnection();
return $this->loadedRows;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你刚刚在我之前忘记了$ $this->loadedRows[$i]
这段代码应该更短:
public function read($sql)
{
$a = array();
$result = mysql_query($sql);
if ($result)
{
while($row = mysql_fetch_assoc($res)) $a[]=$row;
}
return $a;
}
Run Code Online (Sandbox Code Playgroud)
就这样.
并且要自己捕获这些错误,您应该将错误报告级别设置E_ALL
为可以添加此行
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
在您的配置文件中.
它将告诉PHP观察此类错误(在这种情况下使用未定义的常量i)并通知您