我在同一页面上的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;”然后第二个查询抓取数据。
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
您需要在第一个循环中移动第二个循环,否则$row[protein_id]
将返回null。此外,您将$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_
函数已被弃用,因此我建议您切换到mysqli
或PDO
,确实存在sql injection
的风险,看看How can I prevent SQL injection in PHP?。您应该使用准备好的法规来避免任何风险