我是PHP/MySQL的新手,请原谅我。我试图让PHP写一个表,从一个连接表返回的记录列表。当我运行查询时,SQL语句工作完美,但我不知道如何正确编写函数。
SQL语句:
SELECT members.nick_name, assets.asset_desc, shares.asset_cost, shares.percent_owner
FROM
(shares INNER JOIN assets
ON shares.asset_ID = assets.asset_ID)
INNER JOIN members
ON shares.member_ID = members.member_ID
WHERE shares.member_ID = $member_ID"
我的功能:
function get_shares_by_member($member_ID) {
global $db;
$query = "SELECT members.nick_name, assets.asset_desc, shares.asset_cost, shares.percent_owner
FROM
(shares INNER JOIN assets
ON shares.asset_ID = assets.asset_ID)
INNER JOIN members
ON shares.member_ID = members.member_ID
WHERE shares.member_ID = $member_ID";
$share_result = $db->query($query);
$share_result = $share_result->fetch();
return $share_result;
}
function get_shares() {
global $db;
$query = "SELECT * FROM shares";
$share = $db->query($query);
$shares_table = $share->fetch();
return $share;
}
我的行动:
if (isset($_POST['action'])) {
$action = $_POST['action'];
} else if (isset($_GET['action'])) {
$action = $_GET['action'];
} else {
$action = 'list_shares';
}
if ($action == 'list_shares') {
if (!isset($member_ID)) {
$member_ID = 0;
}
$shares = get_shares_by_member($member_ID);
$share = get_shares();
}
这是我的表:
<table>
<tr>
<th>Nick Name</th>
<th>Asset Description</th>
<th>Asset Cost</th>
<th class="right">% Ownership<th>
<th> </th>
</tr>
<?php foreach ($shares_table as $share) : ?>
<tr>
<td><?php echo $share['nick_name']; ?></td>
<td><?php echo $share['asset_desc']; ?></td>
<td><?php echo $share['asset_cost']; ?></td>
<td class="right"><?php echo $share['percent_owner']; ?></td>
<td> </td>
</tr>
<?php endforeach; ?>
</table>
我知道这是很多问题,但我一直在努力与这个在过去的3天。任何帮助将非常感激!如果有人需要AD/Exchange方面的帮助,我很乐意分享我在这方面的知识!
谢谢! !
从我在这里看到的来看,这将生成一个空表,无论出于何种原因返回多少行:
- get_shares_by_member函数返回的列都不是share_ID或asset_ID,所以这些列将不被填充。
- 你正在从$shares引用percent_owner,假设你在'foreach'循环中使用它是一个数组,将需要一个索引来引用它,否则它应该是$share['percent_owner']
- percent_owner字段目前将放在"资产成本"列中,因为没有产生空白单元格来将其移动到"%所有权"列中,在那里它似乎合乎逻辑。
根据你目前发布的内容,以下内容应该符合你的需求:
<table>
<tr>
<th>Nick Name</th>
<th>Asset Description</th>
<th>Asset Cost</th>
<th class="right">% Ownership<th>
<th> </th>
</tr>
<?php foreach ($shares as $share) : ?>
<tr>
<td><?php echo $share['nick_name']; ?></td>
<td><?php echo $share['asset_desc']; ?></td>
<td><?php echo $share['asset_cost']; ?></td>
<td class="right"><?php echo $shares['percent_owner']; ?></td>
<td> </td>
</tr>
<?php endforeach; ?>
</table>
我建议更改foreach中的$share变量,或者由get_shares()设置的$share。就我个人而言,我会从
开始更改后者。$share = get_shares();
转换成:
$shares_table = get_shares();
,因为它实际上包含了来自共享表的所有信息,假设数据库抽象层函数fetch()返回所有结果。
当您执行以下操作时也可能出现问题:
$share = $db->query($query);
$share = $share->fetch();
从不同的数据库抽象层,我看到,我希望fetch()完成(使用您的变量)
$share = $db->fetch();
如果fetch()需要将结果传递给它,那么我希望代码看起来类似于:
$share_result = $db->query($query);
$share = $db->fetch($share_result);
几点说明:
- 你确定你的查询没有返回任何错误吗?如果有的话错误,可能导致fetch()失败
- 您使用的是什么DB类?我建议您核对一下有一个fetch()函数,它接受什么参数?例如,fetch()可以像$share_result->fetch()或$db->fetch()或$db->fetch($share_result)等调用。
- 我可能是错的,但似乎fetch()可能总是返回结果集中的第一行。也许你需要在一个循环中执行fetch()来读取所有结果
您不妨尝试使用默认的PHP函数。下面的代码片段解释了如何使用PHP默认的mysql()库重写函数:
mysql_connect('your host', 'your user', 'your password'); function get_shares_by_member($member_ID) {
$output = Array();
$query = "SELECT members.nick_name, assets.asset_desc, shares.asset_cost, shares.percent_owner
FROM
(shares INNER JOIN assets ON shares.asset_ID = assets.asset_ID)
INNER JOIN members ON shares.member_ID = members.member_ID
WHERE shares.member_ID = $member_ID";
$share_result = mysql_query($query);
while ($row = mysql_fetch_assoc($share_result)) {
$output[] = $row;
}
return $output;
}
function get_shares() {
$output = Array();
$query = "SELECT * FROM shares";
$share = mysql_query($query);
while ($row = mysql_fetch_assoc($share)) {
$output[] = $row;
}
return $output;
}
希望以上内容有所帮助。如果有什么不清楚的地方,请随时告诉我。