【发布时间】:2026-01-28 18:50:02
【问题描述】:
我在 MySQL 中有 2 个表:
预期的表匹配:
id | idA | idB
1 | 21 | 1
2 | 21 | 2
3 | 22 | 3
4 | 8 | 2
5 | 9 | 21
6 | 10 | 7
表格数据:
id | projectId | name
1 | 2 | Chicken
2 | 2 | Pork
3 | 2 | Fish
...
21 | 11 | Potato
22 | 11 | Carrot
23 | 11 | Chili
基于表匹配,例如我想在 idA 仅等于 projectId 11 的行中获取 idA 和 idB 的名称。
我在 CodeIgniter 中构建它,我已经成功foreach idA name,但仍然无法获取 idB 名称。
我希望我的视图是这样的(以 projectId = 11 为例):
name A | nameB
potato | chicken
potato | Pork
carrot | Fish
但是,现在我才明白
name A | nameB
potato | chicken
potato |
carrot |
这是我的代码
型号:
function get_projectA() {
$project_id = $this->uri->segment(4, 0);
$this->db->select('*');
$this->db->from('matches');
$this->db->join('data', 'matches.idA = data.id');
$this->db->where('projectID', $project_id);
$query = $this->db->get();
return $query->result();
}
function get_projectB() {
$project_id = $this->uri->segment(4, 0);
$this->db->select('idB');
$this->db->from('matches');
$this->db->join('image', 'matches.idA = data.id');
$this->db->where('projectID', $project_id);
$query = $this->db->get();
$a = $query->result_array();
foreach ($query->result_array() as $row)
{
$c = $row['idB'];
$query2=$this->db->query("SELECT * FROM data where id='$c'");
$aaa = $query2->result_array();
echo '<pre>';
print_r($aaa);
}
}
查看:
<tbody id="test">
<?php
foreach($get_projectA as $projectA) {
foreach($get_projectB as $projectB) {
?>
<tr>
<td>
<p><?php echo $projectA->name; ?></p>
</td>
<td>
<p><?php echo $projectB['name']; ?></p>
</td>
<td>
<p>3</p>
</td>
<td>
<p>4</p>
</td>
</tr>
<?php } } ?>
</tbody>
【问题讨论】:
-
在编写更多 SQL 代码之前,您必须阅读proper SQL escaping,因为您不能使用字符串连接来编写查询。至少您需要使用appropriate escaping function 或作为更好的选择,绑定到占位符。这些错误可能看起来微不足道,但它们可能会产生巨大的后果,因此您需要遵守规矩,避免任何和所有用户输入。
-
@tadman - CI 活动记录类应该有内置的转义,还是我错了? ellislab.com/codeigniter/user-guide/database/active_record.html
-
@dhitatracker -> $this->db->join('image', 'matches.idA = data.id');这是打字错误吗?不应该是“数据”表吗?
-
@tadman 我只是在这里遵循 codeigniter 的指南select in codeigniter
-
@dhitatracker 请注意链接中的
get_where函数。你应该使用它而不是你正在做的事情。
标签: php mysql codeigniter multidimensional-array