【问题标题】:php pass value to multiple select queriesphp将值传递给多个选择查询
【发布时间】:2013-05-18 14:47:01
【问题描述】:

我在同一页面上的 MySQL 查询之间传递变量时遇到问题。也许有人可以建议我做错了什么。我是 PHP/MySQL 的新手,但答案似乎很简单,我只是不明白。这是我所拥有的:

1. MySQL:表 A:

    id | gene_id | protein_id | disease_id | etc
    ----------------------------------------------
    1  | 672     | P12803     | 091312
    2  | 817     | P99613     | 020346
    3  | 411     | P52021     | 055823

2。搜索结果页面。 显示结果列表。 reaults 由 [$id] 标识,<a href> 链接将 [$id] 传递到另一个页面以获取结果详细信息。这非常有效。

3.详细信息页面。 我从搜索结果页面获取查询结果,并显示表中的相关信息,由 [$id] 标识。这很好用。

    <?php

    $sql = "SELECT * FROM Table_A
    WHERE id=" . $_GET["id"];

    $rs_result = mysql_query ($sql,$connect);  
    while ($row = mysql_fetch_assoc($rs_result)) {

    ?>

    <table class="table">
    <tr><td>Gene: </td><td><? echo $row[gene_id]; ?></td></tr>
    <tr><td>Protein: </td><td><? echo $row[protein_id]; ?></td></tr>
    <tr><td>Disease: </td><td><? echo $row[disease_id]; ?></td></tr>
    </table>

    <?  } ?>

4.显示相关数据。 在详细信息页面上,我想使用上述查询中的“protein_id”显示同一数据库中表 B 中的相关数据。但是这个我不能上班,把“protein_id”传给下一个查询,如下:

表 B:

    id | protein_asc | synonym | name | etc
    ----------------------------------------------
    11  | P12803    | ABC      | this |
    12  | P99613    | DEF      | that |

    <?php

    $new_id = $row[protein_id];

    $sqla = "SELECT * FROM Table_B
    WHERE protein_asc='".$new_id."'";

    $rsa_result = mysql_query ($sqla,$connect);  
    while ($row = mysql_fetch_assoc($rsa_result)) {

    ?>

    <table class="table">
    <tr><td>Synonym: </td><td><? echo $row[synonym]; ?></td></tr>
    <tr><td>Name: </td><td><? echo $row[name]; ?></td></tr>
    </table>

    <?  } ?>

我尝试了许多不同的方法来实现这一点,在第二个 Select 查询中使用连接,但似乎没有任何效果。我知道第二个查询是正确的,因为如果我硬编码“$new_id = P12803;”然后第二个查询抓取数据。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您是否对两个不同的查询使用可变行?

标签: php mysql variables select get


【解决方案1】:

您需要将第二个循环移到第一个循环内,否则$row[protein_id] 将返回为空。此外,您将$row 分配给两个获取,我将第二个更改为$rowa。所以改成

while ($row = mysql_fetch_assoc($rs_result)) {

?>

<table class="table">
<tr><td>Gene: </td><td><? echo $row[gene_id]; ?></td></tr>
<tr><td>Protein: </td><td><? echo $row[protein_id]; ?></td></tr>
<tr><td>Disease: </td><td><? echo $row[disease_id]; ?></td></tr>
</table>

<?php

    $new_id = $row[protein_id];

    $sqla = "SELECT * FROM Table_B
    WHERE protein_asc='".$new_id."'";

    $rsa_result = mysql_query ($sqla,$connect);  
    while ($rowa = mysql_fetch_assoc($rsa_result)) {

    ?>

    <table class="table">
    <tr><td>Synonym: </td><td><? echo $rowa[synonym]; ?></td></tr>
    <tr><td>Name: </td><td><? echo $rowa[name]; ?></td></tr>
    </table>

    <?  } ?>

<?  } ?>

那么我想记住你 mysql_ 函数已被弃用,所以我建议你切换到 mysqliPDO 确实你有sql injection的风险,看看这里How can I prevent SQL injection in PHP? .您应该使用准备好的陈述来避免任何风险

【讨论】:

  • 当然,我有一个括号来关闭第一个循环。非常感谢您的帮助。也感谢关于sql注入的建议。
  • @Ken 你欢迎老兄,不要忘记接受答案以帮助将来有类似问题的人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多