试图返回一个记录集使用PHP &MySQL(内连接)


Trying to return a record set using PHP & MySQL (inner join)

我是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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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()失败
  1. 您使用的是什么DB类?我建议您核对一下有一个fetch()函数,它接受什么参数?例如,fetch()可以像$share_result->fetch()或$db->fetch()或$db->fetch($share_result)等调用。
  2. 我可能是错的,但似乎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; 
}

希望以上内容有所帮助。如果有什么不清楚的地方,请随时告诉我。