while循环中的特定变量

时间:2019-05-13 06:30:47

标签: php mysqli

我有一个while循环用于db输出,有两个查询结果,我想将table_id变量分配给$ _SESSION [“ var”],但是问题是只有最后一个table_id,例如“ 2”存储在$ _SESSION [“ var”]。

<?php
while($rows = mysqli_fetch_assoc($result))
{
?>
<tr>
 <td><?php echo $_SESSION["id"] = $rows["nekretnina_id"]; ?></td>
 <td><a href ="http://localhost/getin/pages/in/result_fin.php"><?php echo $rows["naziv"]; ?></a></td>
 <td><?php echo $rows["tip_naziv"]; ?></td>
 <td><?php echo $rows["kvadratura"]; ?></td>
 <td><?php echo $rows["terasa"]; ?></td>
 <td><?php echo $rows["grejanje"]; ?></td>
 <td><?php echo $rows["opis"]; ?></td>
 <td><?php echo $rows["cena"]; ?></td>
 </tr>
 <?php
 }
 ?>

因此,当我单击链接时,它总是带我到页面以获取第二个结果。如何将每个table_id添加到特定的var或$ _SESSION [“ var”]?

$s = " select * from nekretnina
       INNER JOIN grad ON nekretnina.grad_id=grad.grad_id
       INNER JOIN tip ON nekretnina.tip_id=tip.tip_id where nekretnina_id = 
       '".$_SESSION["id"][2]."' ";

1 个答案:

答案 0 :(得分:0)

您需要将其分配为数组

$_SESSION["id"][]=$rows["nekretnina_id"];

然后将需要像使用数组一样访问条目

echo $_SESSION["id"][1]; //etc

要稍后使用存储的ID来对其他SQL查询进行论坛化,理想情况下,您应使用prepared statements来帮助减轻sql注入攻击的风险。下面的两个nisppets显示了在这种情况下可能会采用的不同方法,尽管我强调都没有经过测试,而且我写错了/语法错误,因为它们写得很快。

while( $rows = mysqli_fetch_assoc( $result ) ){

    $_SESSION["id"][] = $rows["nekretnina_id"];
    /* other code */
}

假定数据库连接对象称为$con

至少有两种方法可以执行此选择语句

第一个通过会话中存储的ID选择每个记录

$sql='select * 
        from `nekretnina` n
        inner join grad g on n.grad_id=g.grad_id 
        inner join tip t on n.tip_id=t.tip_id 
        where n.nekretnina_id=?';

$stmt=$con->prepare( $sql );
if( $stmt ){
    $stmt->bind_param( 'i', $id );

    foreach( $_SESSION["id"][] as $id ){
        $res=$stmt->execute();
        if( $res ){
            $res=$stmt->get_result();

            /* process recordset */
            while( $rs=$res->fetch_object() ){
                echo $rs->name; // assumed column `name` in results
            }
        }
    }
}

第二种方法将使用带有ID范围的单个SQL查询,以使用IN运算符进行选择

$sql='select * 
        from `nekretnina` n
        inner join grad g on n.grad_id=g.grad_id 
        inner join tip t on n.tip_id=t.tip_id 
        where n.nekretnina_id in ( ? )';
$stmt=$con->prepare( $sql );

$idrange = sprintf( "'%s'", implode( ',', $_SESSION["id"] ) );

$stmt->bind_param( 's', $idrange );
$res=$stmt->execute();
if( $res ){
    $res=$stmt->get_result();
    while( $rs=$res->fetch_object() ){
        echo $rs->name; // assumed column `name` in results
    }
}