我目前正在尝试用PHP和mysql编写一个简单的ORM。我希望orm类能够使用连接表。 所以这是我的问题,以下代码显示了我如何将查询产生的数据映射到数组中。
public function execute_query($db_connection)
{
$query = '';
foreach($this->sql_query as $query_part)
$query .= $query_part;
$result = $db_connection->query($query);
while($row = $result->fetch_assoc())
{
array_push($this->m_Data, $row);
}
}
db_connection是一个mysqli对象。 sql_query包含所有不同的查询部分(例如sql_query ['join']等)。 m_Data是包含从db读取的数据的数组。
我现在的具体问题是当我在查询中使用join语句时,此函数将覆盖m_Data数组中具有相同名称的字段。此外,如果我不保存特定字段数据来自表的名称,我以后无法使用相同的连接语句更新表。
TL,博士。我需要能够不仅像这样保存表数据:m_Data {'field_name'=> 'value'}但我还需要保存从中选择字段的表名。然后我可以像这样保存数据m_Data {'table_name.field_name'=> 'value'}使我以后能够生成一个查询来成功更新连接表。
我似乎无法找到有关如何获取我从结果中提取的每个字段的原始表名称的任何信息。
如果不可能使用mysqli,如果你指出我正确的方向,我会非常感激。
超短问题陈述: 我需要得到一个结果集并分别读取每一行。对于每一行,我需要为所选的每个字段提供以下信息:field_name,table_name,value。
必须有一个简单的答案,但我似乎在寻找错误的关键字来寻找解决方案。
我希望我写这篇文章已经足够可以理解了。
答案 0 :(得分:0)
在我看来,您应该将表列值存储在对象中,因此如果您有相关的表,则列值将存储在单独的对象中 - 因此不会干扰主表中的值。 / p>
通常,您可以通过以下方式使用ORM:
// Make joined query
$rows = ...
foreach($rows as $row)
{
// $row just refers to the primary table
echo $row->id;
// You get a many:1 related table this way
echo $row->getRelatedRow()->value;
// You get a 1:many rows this way
$rows = $row->getOtherRelatedRows();
}
根据您设置查询选项的方式,获取相关数据可能会也可能不会启动更多SELECT以获取所需数据。
答案 1 :(得分:0)
mysqli_result::fetch_fields
有用:
http://www.php.net/manual/en/mysqli-result.fetch-fields.php