我有一个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]."' ";
答案 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
}
}