2013-05-18 2 views
0

У меня возникли проблемы с передачей переменной между MySQL-запросами на той же странице. Может быть, кто-то может посоветовать, что я делаю неправильно. Я новичок в PHP/MySQL, но ответ кажется очень легким, я просто этого не вижу. Вот что у меня есть:Значение php pass для нескольких запросов выбора

1. MySQL: Таблица A:

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

2. Результат поиска страницы. Отображает список результатов. Отклонения идентифицируются с помощью [$ 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. Показать связанные данные. На странице сведений я хочу показать связанные данные из таблицы B в той же базе данных, используя «protein_id» из запроса выше. Но это я не могу работать, чтобы передать «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

Вы используете переменную строку для двух разных запросов? – gpicchiarelli

ответ

0

Вы должны переместить свой второй цикл внутри первого цикла в противном случае $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_ функции устарели, так что я бы посоветовал вам переключиться на mysqli или PDO и действительно вы подвержены риску sql injection, смотрите здесь How can I prevent SQL injection in PHP?. Вы должны использовать подготовленный статус, чтобы избежать любого риска.

+0

Конечно, у меня была скобка, закрывающая первый цикл. Большое спасибо за вашу помощь. Также спасибо за предложение по sql-инъекции. – Ken

+0

@ Кен вы приветствуете чувака, не забудьте принять ответ, чтобы помочь людям в будущем с аналогичными проблемами – Fabio

Смежные вопросы