我目前正在尝试用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是包含从数据库读取的数据的数组。
我现在的具体问题是,当我在查询中使用联接语句时,此函数只会覆盖m_Data数组中具有相同名称的字段。此外,如果我不保存特定字段数据来自的表的名称,我以后就不能用相同的联接语句更新表了。
tl,博士。我不仅需要能够这样保存表数据:m_data{'field_name'=>'value'},而且还需要保存从中选择字段的表名。然后,我可以像这样保存数据m_data{'table_name.field_name'=>'value'},这使我以后能够生成查询来成功更新联接的表。
我似乎找不到任何关于如何从结果中提取每个字段的原始表名称的信息。
如果在mysqli无法做到这一点,如果你能给我指明正确的方向,我将不胜感激。
超短问题陈述:我需要得到一个结果集,并分别读取每一行。对于每一行,我需要为所选的每个字段提供以下信息:字段名称、表名称、值。
这个问题肯定有一个简单的答案,但我似乎在寻找错误的关键词来找到解决方案。
我希望我写的这篇文章足够让人理解。
在我看来,应该将表列值存储在对象中,因此如果您有一个相关的表,列值将存储在一个单独的对象中,这样就不会干扰主表中的值。
一般来说,您可以通过以下方式使用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以获取所需数据。
mysqli_result::fetch_fields
有一些有用的东西:
http://www.php.net/manual/en/mysqli-result.fetch-fields.php
- 表
- orgtable
- 字段类型
- 等等